为什么原始类型如Int在Scala中被删除为Object?

Sco*_*son 15 autoboxing scala type-erasure

在斯卡拉,

{ x: Option[Int] => x }
   .getClass
   .getMethod("apply", classOf[Option[_]])
   .getGenericParameterTypes
Run Code Online (Sandbox Code Playgroud)

回报Array(scala.Option<java.lang.Object>).我最初期待看到Array(scala.Option<scala.Int>),但我看到它scala.Int是一个值类(extends AnyVal)'其实例未被底层主机系统表示为对象'.

不过,我仍然不理解擦除Object.难道不是更有用java.lang.Integer吗?

Dan*_*ral 10

难道不是更有用java.lang.Integer吗?

是的,一次就是这种情况.不幸的是,这会导致类型签名破损.也就是说,如果Int被擦除java.lang.Integer,则无法在所有情况下生成正确的字节码.

没有单一的票证或提交,但在此提交中,改变此特定行为的是SI-4214.