Я множество раз слышал о том, что дизайн Generic типов в Java является неудачным. По большей части претензии сводятся к отсутствию поддержки примитивных типов (которую планируют добавить) и к стиранию типов, а конкретнее — невозможности получить фактический тип параметра в рантайме. Лично я не считаю стирание типов проблемой, как и дизайн Generic-ов плохим. Но есть моменты, которые меня порядком раздражают, но при этом не так часто упоминаются.
#### 1 {#1}
Например, мы знаем, что метод `Class#getAnnotation` параметризован и имеет следующую сигнатуру: `public annotationClass)`. Значит, можно писать вот такой код:
Deprecated d = Object.class.getAnnotation(Deprecated.class);
Тут я решаю вынести `Object.class` в отдельную переменную и код перестаёт компилироваться:
Class clazz = Object.class;
// incompatible types:
// java.lang.annotation.Annotation cannot be converted to java.lang.Deprecated
Deprecated d = clazz.getAnnotation(Deprecated.class);
Где я ошибся?
[Читать дальше →][1]
[1]:
https://habrahabr.ru/post/329550/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut