16

在斯卡拉,

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

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

不过,我仍然不明白删除 to Object。难道不是更有用java.lang.Integer吗?

4

1 回答 1

12

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

是的,甚至有一次。不幸的是,这会导致类型签名损坏。也就是说,如果Int被擦除为java.lang.Integer,则不可能在所有情况下都生成正确的字节码。

没有关于此的单一票证或提交,但改变此特定行为的是scala/bug#4214,在此提交中。

于 2012-06-23T16:43:27.580 回答