2009-06-25 2 views
1

가능한 중복 (?) :
What are the reasons why Map.get(Object key) is not (fully) generic자바 6 Map.get() 안전 예기치 않은 동작을 입력

을지도 인터페이스의 JavaDoc을 (http://java.sun.com/javase/6/docs/api/java/util/Map.html)에 따르면, GET의 정의는 맵이 포함 된 경우 값을 돌려줍니다

V get 및 (개체 키) 지정된 키 매핑 또는 는 null있는 키 매핑

코드 예 :

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-notfullyfully -generic – skaffman

답변

0

지도에 키가 포함될 수 없으므로 null 만 반환됩니다.

IntegerArrayList<String>에서 가져온 이유와 동일한 이유입니다. 제네릭 이전에 작동했기 때문에 이전 코드를 손상시키지 않도록 유지되었습니다.

+1

왜 이것을 다운 그레이드 했습니까? – mihi

1

Map.get의 정의는, Y>Y를 얻을 지도 < X에 대한 (개체 키)하고 Map.get은 (키 == 널 (null)을 반환합니다 K == 널 (null) : key.equals 내가 널, 당신의 InstrumentInfo하지 않는 오버로드 .equals를 반환하는 기대 (k)는, 정수로 비교할 수 있습니다.

Y는Y 취득 (X 키 (개체 키)하지받을 이유) 잘 모르겠지만 이전 버전과의 호환성 문제와 관련이 있다고 생각합니다.