我是Scala的新手,我不明白这一点:
scala> case class foo[T](value:T){println(value.getClass.toString)}
defined class foo
scala> val bar=foo(1)
class java.lang.Integer
bar: foo[Int] = foo(1)
scala> println(bar.value.getClass.toString)
int
在构造时它返回'class java.lang.Integer',当在case类之外查询时它返回'int'。
答案 0 :(得分:3)
这是自动(联合)拳击。 JVM要求T
是Object
的子类,以用作泛型类型参数,因此value
实际上是Integer
。
在通用代码之外,当编译器知道value
的具体类型时,它会为您取消装箱,以便它变为int
。
请注意,它与case类(或者根本就没有类)无关,它只是一个关于如何实现类型参数和值类的工件。试试这个:
def foo[T](value: T) = { println(value.getClass); value }
println(foo(1).getClass)
这将打印:
class java.lang.Integer
int