Как использовать Класс <T> в Java?

236
задан Community 23 May 2017 в 02:18
поделиться

6 ответов

Используя generified версию класса Класс позволяет Вам, среди прочего, писать вещи как

Class<? extends Collection> someCollectionClass = someMethod();

, и затем можно быть уверены, что Объект класса, который Вы получаете, расширяется Collection, и экземпляром этого класса будет (по крайней мере), Набор.

127
ответ дан Aryaveer 23 November 2019 в 03:26
поделиться

Из Документации Java:

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

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

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

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

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

ну, я никогда не должен был использовать этот вид материала. Кто-либо?

32
ответ дан Peter Ajtai 23 November 2019 в 03:26
поделиться

Я нашел class<T> полезный, когда я создаю поиски реестра сервисов. Например,

<T> T getService(Class<T> serviceClass)
{
    ...
}
9
ответ дан Kire Haglin 23 November 2019 в 03:26
поделиться

Как другие ответы указывают, существуют многие и серьезные основания, почему это class было сделано универсальным. Однако существует много времен, которые у Вас нет способа знать, что универсальный тип использует с Class<T>. В этих случаях можно просто проигнорировать желтые предупреждения затмения, или можно использовать Class<?>... Это - то, как я делаю это;)

5
ответ дан bruno conde 23 November 2019 в 03:26
поделиться

Вы часто хотите использовать подстановочные знаки с Class. Например, Class<? extends JComponent>, позволил бы Вам определять, что класс является некоторым подклассом JComponent. Если Вы получили Class экземпляр от Class.forName, то можно использовать Class.asSubclass, чтобы сделать бросок прежде, чем попытаться, скажем, создать экземпляр.

2
ответ дан Tom Hawtin - tackline 23 November 2019 в 03:26
поделиться

В начале все запутано. Но это помогает в следующих ситуациях:

class SomeAction implements Action {
}

// Later in the code.
Class<Action> actionClass = Class.forName("SomeAction"); 
Action action = actionClass.newInstance();
// Notice you get an Action instance, there was no need to cast.
-2
ответ дан 23 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: