2013-05-05 3 views
9

В чем разница между Class<?> и Class<Object> в Java? AFAIK Java Erasure изменяет <?> на верхнюю границу, которая в этом случае будет Object в любом случае. Так для чего это?Разница между классом <?> и классом <Object> в Java

+2

Наглядно, он чувствует себя не так, чтобы иметь 'Class ' быть ничего, кроме ' Object.class'. Главным образом потому, что это напоминает мне много и много вопросов, которые имеют форму «Я хочу присвоить« Список »' '', но Java не позволит мне ». При написании кода вам не следует в первую очередь заботиться о том, какие дженерики будут стирать - вся точка генерик заключается в том, чтобы позволить компилятору выполнить некоторые проверки типов * до того, как они будут стерты. – millimoose

+0

Возможный дубликат [В чем разница между? и Object в Java generics?] (http://stackoverflow.com/questions/678822/what-is-the-difference-between-and-object-in-java-generics). Также см. [Java: разные между списком, списком , списком , списком и списком ] (http://stackoverflow.com/questions/6231973/java-different-between-list-list-listt-liste-and -listobject) –

+0

Я думаю, что это http://docs.oracle.com/javase/tutorial/java/generics/unboundedWildcards.html объясняет это довольно хорошо, если я правильно понял вопрос. – arynaq

ответ

6

разница в том, что Collection<String> не является подтипом Collection<Object>, Collection<?> может использоваться на месте в качестве аргумента, где любой коллекции можно положить

+1

Класс определенно не является супер-типом всех коллекций. Во-первых, «Класс» не имеет ничего общего с коллекциями. Даже вы имеете в виду супер-тип всех «классов», это все еще неправильно. Есть некоторые дополнительные чтения о подстановочных знаков в дженериках. –

+0

Исправлено, лучше отбросьте это – aaronman

+2

Что не так с этим – aaronman

Смежные вопросы