Это возникло в качестве вопроса, который я недавно задал в интервью, поскольку кандидат хотел бы видеть добавление к языку Java. Обычно болью называют то, что в Java нет обобщенных дженериков, но, когда меня подталкивали, кандидат не мог сказать мне, чего бы он мог достичь, если бы они были там.
Очевидно, что из-за того, что в Java допустимы необработанные типы (и небезопасные проверки), можно разрушить обобщенные типы и получить в результате a, List<Integer>
который (например) фактически содержит String
s. Очевидно, что это можно было бы сделать невозможным, если бы информация о типе была переработана; но должно быть нечто большее !
Могут ли люди публиковать примеры того, что они действительно хотели бы делать , если бы были доступны обобщенные дженерики? Я имею в виду, очевидно, что вы могли получить тип a List
во время выполнения - но что бы вы с ним сделали?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
РЕДАКТИРОВАТЬ : быстрое обновление этого, поскольку ответы, похоже, в основном связаны с необходимостью передать a Class
в качестве параметра (например EnumSet.noneOf(TimeUnit.class)
). Я искал что-то вроде того, где это просто невозможно . Например:
List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
l1.addAll(l2); //why on earth would I be doing this anyway?