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