2008-10-10 3 views

ответ

6

Примечание: этот ответ устарел!

Пожалуйста, смотрите ответ, используя TypeTag для Scala 2.10 и выше

Могу ли я рекомендовать #Scala на Freenode

10:48 <seet_> http://stackoverflow.com/questions/190368/getting-the-string-representation-of-a-type-at-runtime-in-scala <-- isnt this posible? 
10:48 <seet_> possible 
10:48 <lambdabot> Title: Getting the string representation of a type at runtime in Scala - Stack Overflow, 
        http://tinyurl.com/53242l 
10:49 <mapreduce> Types aren't objects. 
10:49 <mapreduce> or values 
10:49 <mapreduce> println(classOf[T]) should give you something, but probably not what you want. 

+0

Ребята там очень приятно! – svrist 2008-10-10 09:00:02

+1

это ложь. см. ответ о манифестах – Alexey 2010-04-25 15:19:46

2

Пожалуйста, обратите внимание, что это на самом деле не «вещь : "

object Test { 
    def main (args : Array[String]) { 
    println(classOf[List[String]]) 
    } 
} 

дает

$ scala Test      
class scala.List 

Я думаю, что вы можете обвинить это на стирании

==== ==== EDIT Я пытался сделать это с помощью метода с родовым параметром типа:

object TestSv { 
    def main(args:Array[String]){ 
    narf[String] 
    } 
    def narf[T](){ 
    println(classOf[T]) 
    } 
} 

И компилятор не примет его. Типы arn't classes - это объяснение

6

В Scala есть новая, в основном недокументированная функция, называемая «манифесты»; он работает так:

object Foo { 
    def apply[T <: AnyRef](t: T)(implicit m: scala.reflect.Manifest[T]) = println("t was " + t.toString + " of class " + t.getClass.getName() + ", erased from " + m.erasure) 
} 

AnyRef связаны только там, чтобы убедиться, что значение имеет метод .ToString.

8

В Scala 2.10 и выше используйте TypeTag, которая содержит полную информацию о типе. Вам необходимо включить scala-reflect библиотеку для того, чтобы сделать это:

import scala.reflect.runtime.universe._ 
def printTheNameOfThisType[T: TypeTag]() = { 
    println(typeOf[T].toString) 
} 

вы получите результаты, как следующее:

scala> printTheNameOfThisType[Int] 
Int 

scala> printTheNameOfThisType[String] 
String 

scala> printTheNameOfThisType[List[Int]] 
scala.List[Int] 
Смежные вопросы