Почему примитивные типы, такие как Int erased Object в Scala?

В Scala,

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

возвращает Array(scala.Option<java.lang.Object>). Сначала я ожидал увидеть Array(scala.Option<scala.Int>), но я вижу, что scala.Int - это класс значений (extends AnyVal) ', экземпляры которых не представлены как объекты базовой системой хоста.

Я все еще не понимаю стирание Object. Не могло ли быть гораздо более полезным java.lang.Integer?

Ответы

Ответ 1

Не может ли быть гораздо более полезным java.lang.Integer?

Да, и это было даже так, один раз. К сожалению, это приводит к сломанным типам сигнатур. То есть невозможно создать правильный байт-код во всех ситуациях, если Int стирается до java.lang.Integer.

Нет ни одного билета или фиксации об этом, но тот, который изменил это конкретное поведение, SI-4214, в this commit.