为什么从 case class 外部查询时,getClass return case class 构造函数参数的值不同?

Why does getClass return a different value on a case class constructor parameter when queried from outside the case class?

我是 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

构建时returns'class java.lang.Integer',在case外查询时classreturns'int'.

这是自动(取消)装箱。 JVM 要求 TObject 的子类才能用作泛型类型参数,所以 value 实际上是一个 Integer。 在通用代码之外,当编译器知道 value 的具体类型时,它会为您拆箱,使其变为 int.

请注意,它与大小写 类(或 类 完全无关)无关,它只是类型参数和值 类 实现方式的产物.试试这个:

 def foo[T](value: T) = { println(value.getClass); value }
 println(foo(1).getClass)

这将打印:

 class java.lang.Integer
 int