2009-06-25 3 views
1

Можно создать дубликат (?):
What are the reasons why Map.get(Object key) is not (fully) genericJava 6 Map.get() Тип безопасности непредвиденное поведение

Согласно Javadocs (http://java.sun.com/javase/6/docs/api/java/util/Map.html) для интерфейса карт, определение получаете

V прибудет (ключ объекта) Возвращает значение, которое указанный ключ отображается, или нуль если эта карта не содержит отображение для ключа.

Пример кода:

Map<InstrumentInfo, Double> moo = new HashMap<InstrumentInfo,Double>(); 
moo.get(new Integer(5)); 

Я бы ожидать, что приведенный выше код будет сгенерировано исключение или, по крайней мере, дать предупреждение.

Я бы ожидал, что с помощью дженериков и типа безопасности метод get примет параметр типа. В чем причина принятия типа Object, а не?

+1

Дубликат http://stackoverflow.com/questions/857420/what-are-the-reasons-why-map-getobject-key-is-not-fully -generic – skaffman

ответ

0

Он просто вернет null, так как карта никогда не может включать ключ.

Это по той же причине, почему вы можете remove() a Integer от ArrayList<String> - он работал до дженериков, поэтому он хранился таким образом, чтобы не нарушать старый код.

+1

Почему это было downvoted? – mihi

1

Определение Map.get является Y прибудет (ключ объекта) для карт < X, Y> и Map.get вернется (ключ == NULL K == NULL:? Key.equals (к), я бы ожидать, чтобы вернуть нуль, если ваш InstrumentInfo не перегруженные .equals, чтобы иметь возможность сравнить Целые.

Почему Y получить (ключ объекта) не Y получить (клавиша X) Я не знаю, хотя, но я предполагаю, что это связано с проблемами обратной совместимости.

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