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?
Около минуты
29 февраля 2024