为什么从 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 要求 T
是 Object
的子类才能用作泛型类型参数,所以 value
实际上是一个 Integer
。
在通用代码之外,当编译器知道 value
的具体类型时,它会为您拆箱,使其变为 int
.
请注意,它与大小写 类(或 类 完全无关)无关,它只是类型参数和值 类 实现方式的产物.试试这个:
def foo[T](value: T) = { println(value.getClass); value }
println(foo(1).getClass)
这将打印:
class java.lang.Integer
int
我是 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 要求 T
是 Object
的子类才能用作泛型类型参数,所以 value
实际上是一个 Integer
。
在通用代码之外,当编译器知道 value
的具体类型时,它会为您拆箱,使其变为 int
.
请注意,它与大小写 类(或 类 完全无关)无关,它只是类型参数和值 类 实现方式的产物.试试这个:
def foo[T](value: T) = { println(value.getClass); value }
println(foo(1).getClass)
这将打印:
class java.lang.Integer
int