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

时间:2012-06-23 06:30:14

标签: scala type-erasure autoboxing

在Scala中,

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

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

但我仍然不理解对Object的删除。难道不是更有用java.lang.Integer吗?

1 个答案:

答案 0 :(得分:6)

  

它不是更有用java.lang.Integer吗?

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

没有关于此的故障单或提交,但在SI-4214中更改了此特定行为的是this commit