Найти в Дзене
84 подписчика

🖥 Проклятие дженериков 💀


Дженерики могут показаться очень простой темой.
Например, вот так в Java выглядят классные и простые методы интерфейса List:

interface List<E> extends Collection<E> {
boolean add(E e);
E set(int index, E element);
}
Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование.

Вот не менее классный, но совсем непростой flatMap интерфейса Stream 🙈:
interface Stream<T> extends BaseStream<T, Stream<T>> {
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
}

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

Такие вот дела ¯\_(ツ)_/¯
А вы что думаете по поводу дженериков в Java?

🖥 Проклятие дженериков 💀  Дженерики могут показаться очень простой темой.
Около минуты