In Scala, ist es möglich, die Zeichenfolgendarstellung eines Typs zur Laufzeit zu erhalten? Ich versuche, etwas in diese Richtung zu tun:Die Zeichenfolgendarstellung eines Typs zur Laufzeit in Scala abrufen
Antwort
Hinweis: Diese Antwort ist veraltet!
Bitte siehe Antwort mit TypeTag für Scala 2.10 und oben
Darf ich #Scala auf 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.
Bitte beachten empfehlen, dass dies nicht wirklich „das Ding : "
object Test {
def main (args : Array[String]) {
println(classOf[List[String]])
}
}
gibt
$ scala Test
class scala.List
Ich glaube, Sie diese auf Löschung verdenken
==== ==== EDIT Ich habe versucht, es mit einer Methode mit einem generischen Typparameter tun:
object TestSv {
def main(args:Array[String]){
narf[String]
}
def narf[T](){
println(classOf[T])
}
}
Und der Compiler akzeptiert es nicht. Typen sind keine Klassen ist die Erklärung
Es gibt eine neue, meist undokumentierte Funktion namens "Manifeste" in Scala; es funktioniert wie folgt:
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)
}
Die AnyRef gebunden gerade dort ist der Wert hat ein .toString Verfahren zu gewährleisten.
Verwenden Sie in Scala 2.10 und höher TypeTag
, die vollständige Typinformationen enthält. Sie verlassen nun die scala-reflect
Bibliothek enthalten, um brauchen, um dies zu tun:
import scala.reflect.runtime.universe._
def printTheNameOfThisType[T: TypeTag]() = {
println(typeOf[T].toString)
}
Sie werden Ergebnisse erhalten wie folgt aus:
scala> printTheNameOfThisType[Int]
Int
scala> printTheNameOfThisType[String]
String
scala> printTheNameOfThisType[List[Int]]
scala.List[Int]
Die Jungs sind wirklich nett! – svrist
ist es falsch. siehe Antwort zu Manifesten – Alexey