문제

In Scala,

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

returns Array(scala.Option<java.lang.Object>). I'd initially been expecting to see instead Array(scala.Option<scala.Int>), but I see that scala.Int is a value class (extends AnyVal) 'whose instances are not represented as objects by the underlying host system'.

I still don't understand the erasure to Object, though. Couldn't it be the much more useful java.lang.Integer?

도움이 되었습니까?

해결책

Couldn't it be the much more useful java.lang.Integer?

Yes, and that was even the case, once. Unfortunately, that leads to broken type signatures. That is, it is impossible to generate correct bytecode in all situations if Int is erased to java.lang.Integer.

There isn't a single ticket or commit about this, but the one that changed this particular behavior is scala/bug#4214, in this commit.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top