Что Map <?,?> Означает в Java? - PullRequest
6 голосов
/ 21 июля 2011

Что означает Map<?, ?> в Java?
Я посмотрел онлайн, но не могу найти ни одной статьи по нему.

редактировать: я нашел это на Продолжительность MP3 Java

Ответы [ 5 ]

10 голосов
/ 21 июля 2011

Map<?,?> означает, что во время компиляции вы не знаете, каким будет тип класса объекта ключа и значения карты.

Это подстановочный тип.http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html

4 голосов
/ 21 июля 2011

? указывает местозаполнитель, значение которого вас не интересует (подстановочный знак):

HashMap<?, ?> foo = new HashMap<Integer, String>();

А так как ? является подстановочным знаком, вы можете пропустить его и при этом получить тот же результат:

HashMap foo = new HashMap<Integer, String>();

Но они могут использоваться для указания или подмножества используемых обобщений.В этом примере первый универсальный объект должен реализовывать интерфейс Serializable.

// would fail because HttpServletRequest does not implement Serializable
HashMap<? extends Serializable, ?> foo = new HashMap<HttpServletRequest, String>(); 

Но всегда лучше использовать конкретные классы вместо этих подстановочных знаков.Вы должны использовать ?, только если знаете, что делаете :)

1 голос
/ 21 июля 2011

Map<?,?> говорит вам, что вы можете использовать каждый объект для key и value на вашей карте.

Но обычно более полезно использовать такие обобщения как:

Map<String, YourCustomObject> map

Таким образом, на этой карте вы можете только put a String в качестве ключа и YourCustomObject в качестве значения.

См. Это учебное пособие по родовым объектам.

1 голос
/ 21 июля 2011

Начиная с Java5, Generics предоставляются с языком. http://download.oracle.com/javase/tutorial/java/generics/index.html

Обозначение означает, что создаваемая вами карта будет принимать объект класса A в качестве ключа и объект класса B в качестве значения.

Это поможет вам как разработчику, так что вы больше не приведете Object к нужному классу. Таким образом, вы не сможете использовать карту с ключами, отличными от A, и объектами, отличными от B. Избегайте отвратительных приведений и ограничений по времени компиляции

0 голосов
/ 21 июля 2011

? подстановочный знак в дженериках. Солнце ... э-э ... Oracle имеет хороший учебник по дженерикам здесь . Там есть отдельный раздел о подстановочных знаках.

Вы, вероятно, получите лучший ответ, если разместите больше контекста на свой вопрос, например, где вы видели Map<?, ?>.

...