Почему примитивные типы, такие как Int, стираются в Object в 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 ответ
Разве это не может быть намного более полезным
java.lang.Integer
?
Да, и так было даже когда-то. К сожалению, это приводит к повреждению подписей. То есть невозможно создать правильный байт-код во всех ситуациях, если Int
стирается в java.lang.Integer
,
Нет ни одного билета или коммита по этому поводу, но тот, который изменил это конкретное поведение, это SI-4214, в этом коммите.