Выкладываю данный пост с целью получения обратной связи от хабра-сообщества Java-программистов. При наличии достаточного количества голосов «за» эту фичу можно будет отправить для рассмотрения в Sun.
Проблема
После длительной работы с Java 5 и Java 6 и небольшой аналитики я пришел к тому, что generic'и в Java имеют ряд ограничений, которые не дают реализовать решение красивым способом, и обходить их порой приходится очень нетривиально. Данное высказывание относится к разработке подсистем, которые активно используют generic'и (доходит до 3-4 generic-типов со сложной иерархией в описании класса).
Приведу примеры кода, которые явно указывают на данные ограничения, а также неудобство использования (рассматривать только синтаксис):
public class A {
public <X> void method(List<? extends X> list) {
// processElement(list, list.get(0)); - compilation error
processElement((List) list, (Object) list.get(0)); // compilation warning
}
public <T> void processElement(List<T> list, T object) {
}
public static class B<T extends I1 & I2> {
}
// Приходится повторять объявления generic-типов
public static class С<T extends I1 & I2> extends A.B<T> {
}
}