Почему примитивные типы, такие как 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, в этом коммите.

Другие вопросы по тегам