Подтвердить что ты не робот

Почему Java Class <T> общий?

Почему Java Class<T> generic?

4b9b3361

Ответ 1

Таким образом, можно использовать типичные типизированные методы -

Class<Foo> klass = Foo.class;
Foo f = klass.newInstance();
Foo f = klass.cast(Object);

Ответ 3

Вкратце об этом упоминается в разделе Generics версии 1.5 руководства по языку:

Более удивительно, класс Class был расширен. Литералы классов теперь функционируют как токены типа, предоставляя информацию о времени выполнения и времени компиляции. Это позволяет использовать стиль статических фабрик, например, методом getAnnotation в новом интерфейсе AnnotatedElement:

<T extends Annotation> T getAnnotation(Class<T> annotationType); 

Это общий метод. Он выводит значение своего параметра T параметра из его аргумента и возвращает соответствующий экземпляр T, как показано следующим фрагментом:

Author a = Othello.class.getAnnotation(Author.class);

До родословных вам пришлось бы придать результат Автору. Также у вас не было бы способа заставить компилятор проверить, что фактический параметр представляет собой подкласс Annotation

Ответ 4

Настоящая причина дается Neil Gafter:

Когда мы добавили generics в Java в JDK5, я изменил класс java.lang.Class, чтобы стать универсальным типом. Например, тип Теперь String.class является классом < Строкa > . Гилад Брача придумал термин типа токены для этого. Мое намерение состояло в том, чтобы включить определенный стиль API, которые Джошуа Блох называет ТГК, или Типы гетерогенных контейнеров шаблон.