Тип класса Java - PullRequest
       5

Тип класса Java

8 голосов
/ 14 ноября 2008

У меня есть блок кода, который работает, и я хотел спросить, что именно здесь происходит?

Class<?> normalFormClass = null;

--- добавил ---

Подстановочный знак "<?>" - часть, которая меня смущает. Почему бы это использовать, а не не использовать (генерики)?

Ответы [ 5 ]

12 голосов
/ 14 ноября 2008

Это означает, что это может быть класс любого типа. ? подстановочный знак, обозначающий множество всех типов, или «любой». Таким образом, вы можете позже сделать

Integer normalForm = new Integer();
normalFormClass = normalForm.getClass();

или

String normalForm = new String();
normalFormClass = normalForm.getClass();

Если вы не знаете об обобщениях на Java, прочитайте http://java.sun.com/developer/technicalArticles/J2SE/generics/

Что касается причины, я думаю, что может быть строго выражено, что вы используете повсеместно дженерики и ваш код несовместим со старыми версиями Java, или, возможно, закрыли некоторые триггерные довольные IDE. И да,

Class foo 

и

Class<?> foo 

эквивалентны.

4 голосов
/ 14 ноября 2008

Также общая версия

Class<?> normalClass = null;

в значительной степени эквивалентно версии необработанного типа,

Class normalClass = null;

основное отличие заключается в том, что последний будет совместим с версиями Java, которые не поддерживают обобщенные элементы, такими как Java 1.4.

3 голосов
/ 15 ноября 2008

Class означает, что, начиная с JDK 1.5, Class генерируется типом, который определяет класс. Один из способов думать об этом заключается в том, что Class - это фабрика для создания экземпляров своего типа.
В частности, Class создает экземпляры типа T из метода Class.newInstance ().

Начиная с JDK 1.5, в спецификации языка Java рекомендуется не использовать необработанные типы. Итак, настоятельно рекомендуется, чтобы при работе с экземпляром Class неизвестного типа вы называли его «Class <?>», А не просто «Class». Конечно, если вы на самом деле знаете тип или некоторую границу, вы можете найти некоторые преимущества его указания.

2 голосов
/ 14 ноября 2008

Класс или Класс <?> Работает одинаково хорошо. Одна из причин использовать последнее - избавиться от нескольких предупреждений, которые иде или компилятор будут выдавать вам при использовании первой формы.

0 голосов
/ 14 ноября 2008

Я сомневаюсь, что это домашнее задание, так как я никогда не был в классе, который говорил о рефлексии.

Но это простое нулевое назначение. Это ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...