вопрос как выше, извините, это, вероятно, дубликат, но я не мог найти пример с <?>
на конце.Что означает класс <?> на Java?
Почему вы не используете только параметр Class
?
вопрос как выше, извините, это, вероятно, дубликат, но я не мог найти пример с <?>
на конце.Что означает класс <?> на Java?
Почему вы не используете только параметр Class
?
Class
является параметризуемым класс, следовательно, вы можете использовать синтаксис Class<T>
где T является типом. Написав Class<?>
, вы объявляете объект Class
, который может быть любого типа (?
является подстановочным знаком). Тип Class
- это тип, содержащий метаинформацию о классе.
Это всегда хорошая практика, чтобы обратиться к универсальному типу, указав его конкретного типа, с помощью Class<?>
вы уважая эту практику (вы знаете о Class
быть параметризуемым), но вы не ограничивая свой параметр, чтобы определенного типа.
Справка о Generics и Wildcards: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
ссылочного об объекте Class и отражении (в особенности Java языка, используемой для интроспектировать себя): http://java.sun.com/developer/technicalArticles/ALT/Reflection/
В чем преимущество этого, просто используя 'Class' без типа? Кажется, они представляют одно и то же. – ashes999
Я думал, что весь смысл родового, вы не знаете тип класса авансом. В противном случае вы просто определите функцию для использования определенного типа класса для параметра. Этот вопросительный знак все еще не имеет смысла. – Brain2000
Нет другого преимущества, кроме того, что вы говорите компилятору, что «я знаю, что это общий класс, но я не знаю или не забочусь о фактическом типе, поэтому вместо того, чтобы давать конкретный тип, я даю'? 'подстановочный знак.". Если вы не дадите подстановочный знак, компилятор предполагает, что вы либо забыли тип, либо не знали, что класс является общим, и предупредит вас об этом. – Kayaman
Это generics буквально. Это означает, что вы не знаете тип класса, который представляет экземпляр Class
, но вы все еще используете общую версию.
Class<Foo>
. Таким образом, вы можете создать новый экземпляр, например, без литья: Foo foo = clazz.newInstance();
Это означает класс с типом чего-либо (неизвестного).
Вы должны прочитать Java дженериков учебник, чтобы понять это лучше
Это означает, что ваша ссылка класс может содержать ссылку на любой объект класса.
Это в основном то же самое, что и «Класс», но вы показываете других людей, которые читают ваш код, который вы не забыли о дженериках, вам просто нужна ссылка, которая может содержать любой объект класса.
Брюс Eckel, мышление в Java:
В Java SE5, класс <> предпочтительнее обычного класса, несмотря на то, что они эквивалентны и равнину класса, как вы видели, не производит? a предупреждение о компиляторе. Преимущество класса <?> Заключается в том, что он указывает, что вы не просто используете ссылку на неспецифический класс по ошибке , либо из-за незнания. Вы выбрали неспецифическую версию.
цитата говорит «Класс > предпочтительнее обычного класса» и « преимущество класса > ". Кажется, blockquote не согласуется с угловыми скобками. – MasterF
Необходимо сбежать. Исправлено: P –
В воспроизведенных, неизвестном типе представлена подстановочный знак "?". Прочтите here для официального примера.
<?>
зверь.Это часто приводит к путанице и ошибкам, потому что, когда вы видите это сначала, вы начинаете верить, <?>
- это шаблон для любого типа java. Что ... неправда. <?>
- неизвестный тип, небольшая и неприятная разница.
Это не проблема, если вы используете его с Class
. Обе линии работают и компилировать:
Class anyType = String.class;
Class <?> theUnknownType = String.class;
Но - если мы начнем использовать его с коллекциями, то мы видим странные ошибки compiletime:
List<?> list = new ArrayList<Object>(); // ArrayList<?> is not allowed
list.add("a String"); // doesn't compile ...
Наш List<?>
не коллекция, которая подходит для просто любой тип объекта. Он может хранить только один тип: мистический «unkown type». Конечно, это не настоящий тип.
http://en.wikipedia.org/wiki/Wildcard_%28Java%29 – Anycorn
http://stackoverflow.com/q/2024513/1140748 –