Это возникло как вопрос, который я недавно задал в интервью, как то, что кандидат хотел видеть добавленным к языку Java. Это обычно называют болью в том, что у Java нет усовершенствованных дженериков , но, когда его выдвинули, кандидат не мог на самом деле сказать мне, чего он мог достичь, если бы он был там.
Очевидно, что необработанные типы допустимы в Java (и небезопасные проверки), возможно подорвать дженерики и в итоге получить List<Integer>
, который (например) фактически содержит String
с. Это явно можно было бы сделать невозможным, если бы информация о типах была усовершенствована; но должно быть и больше !
Могут ли люди опубликовать примеры вещей, которые они действительно хотели бы сделать , были ли доступны дженерики? Я имею в виду, очевидно, вы могли бы получить тип List
во время выполнения - но что бы вы сделали с ним?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
РЕДАКТИРОВАТЬ : Быстрое обновление этого, поскольку ответы, по-видимому, в основном касаются необходимости передачи 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?