在https://stackoverflow.com/a/40486805/4533188中,我被告知扩展AnyVal
的类不能被编译器解包(在某些情况下,JVM字节码中只有底层原语)。取消装箱不起作用的所有规则是什么?
我理解如果将一个扩展AnyVal的类放入一个集合中,那么取消装箱就不起作用了。我也得到了一个关于泛型的例子,但我想了解整个图片。
答案 0 :(得分:2)
The documentation is pretty clear on these occasions:
分配摘要
在以下情况下实际实例化值类:
- 将值类视为另一种类型。
- 分配了一个值类 数组。
- 进行运行时类型测试,例如模式匹配。
值类的示例被视为另一种类型:
trait Distance extends Any
case class Meter(val value: Double) extends AnyVal with Distance
def add(a: Distance, b: Distance): Distance = ???
add(Meter(3.4), Meter(4.3))
分配给数组的值类的示例:
val arrayOfMeter: Array[Meter] = ???
模式匹配示例:
val p: Meter = new Meter(1.0)
p match {
// ...
}