Scala 2.10反射:为什么列表和列表元素的类型为“List()”?
发布时间:2020-12-16 10:02:31 所属栏目:安全 来源:网络整理
导读:使用 scala-2.10.0-M7,请考虑以下 Scala程序: import reflect.runtime.universe._object ScalaApplication { def main(args: Array[String]) { val list = List(42) printValueAndType(list) printValueAndType(list(0)) } def printValueAndType (thing: A
使用
scala-2.10.0-M7,请考虑以下
Scala程序:
import reflect.runtime.universe._ object ScalaApplication { def main(args: Array[String]) { val list = List(42) printValueAndType(list) printValueAndType(list(0)) } def printValueAndType (thing: Any) { println("Value: " + thing) println(reflect.runtime.currentMirror.reflect(thing).symbol.toType match {case x:TypeRef => "Type: " + x.args}); } } 它给出了以下输出: $scala ScalaApplication.scala Value: List(42) Type: List() Value: 42 Type: List() 为什么列表类型与列表类型(0)相同? 我本来期望类似于以下Java程序的行为: public class JavaApplication { public static void main(String[] args) { Integer[] list = new Integer[]{42}; printValueAndType(list); printValueAndType(list[0]); } public static void printValueAndType(Object o) { System.out.println("Value: " + o.toString()); System.out.println("Type: " + o.getClass().getSimpleName()); } } 结果如下: $java JavaApplication Value: [Ljava.lang.Integer;@16675039 Type: Integer[] Value: 42 Type: Integer 综上所述: 解决方法
x.args为您提供该类型的类型参数.由于它们在运行时不可用,因此第一种情况下会得到一个空列表,因为Int没有任何类型参数,所以也会得到一个空列表.您可以直接打印出符号.
println(reflect.runtime.currentMirror.reflect(thing).symbol) 这产生了 Value: List(42) class :: Value: 42 class Integer (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |