Как стать автором
Обновить

Комментарии 13

Спасибо! Отличная статья и написана приятным слогом!

Это несколько ограниченно, так как для создания типа-суммы вы должны контролировать всех наследников: в тип-сумму, например, нельзя включить класс стандартной библиотеки.

Нет никакого ограничения, в тип-сумму "включаются" не типы, а конструкторы. Которым соответствуют отдельные конкретные классы, созданные специально для этой цели.


Возможно, вы путаете тип-сумму и тип-объединение.

Спасибо.
Не подскажете, когда там планируют от Type Erasure избавиться и завести поддержку обобщений на уровне байт-кода?

Никогда не планируют. С type erasure вполне можно жить. Специализация будет разве что для параметризации примитивами, когда её завезут.

А чем обусловлено? Ведь прям просится же, и, по идее, можно сделать не ломая обратную совместимость. За статью спасибо, она отличная! Ждем вторую часть.
можно сделать не ломая обратную совместимость.

Предложите, как.

Не ломая обратную совместимость никак не сделаете. Вот простой вопрос на подумать для затравки. Есть класс AbstractList и есть класс ArrayList, его наследник. В Java-программах есть типы AbstractList<?>, ArrayList<?>, AbstractList<String>, ArrayList<String>. Если специализировать, то в рантайме это должно быть четыре отдельных класса. Нарисуйте их иерархию.

Ждем вторую часть

Есть же уже.

Я не такой умный, я не знаю. Просто хочется верить, что когда-нибудь при использовании рефлекшена все же можно будет иметь на руках все преимущества типизации, а не некий обобщенный Object, с которым еще нужно придумать, что делать дальше.

За ссылку на продолжение спасибо, пропустил! Может ее в начало статьи вставить?

Разве специализацию не планируют использовать ещё для "компактных" массивов из value-based types? Там, где предлагается например object header в массив класть не по количеству элементов, а только один раз в самом начале. Или они будут считаться как параметризация примитивами? Или саму идею решили из планов выбросить?
Я доклады про такое периодически видел примерно с момента выхода Java 8 (более формально — с момента, как я узнал про Project Valhalla и стал читать чего же там делается).

Массивы вообще отдельная история, ортогональная обобщённым типам и erasure. Тип элементов массива не был стёрт никогда. Да, такие массивы будут когда-нибудь.

С каждым новым релизом писать ООП-код в Java становится всё труднее. Я думал, что после приватных методов в интерфейсах меня ничем не удивишь. Но нет, теперь у нас есть Sealed-классы. То есть, родительский класс может зависеть от своих потомков. Браво, Java!))

Как новые возможности лишают вас тех возможностей, что были раньше?

Меня никак.

А вот новичков жалко.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий