변수 로 키 의 값과 모든 유형의 값을 가질 수 있음을 선언 hash1으로 선언 합니다.HashMap<String, ?>hash1HashMapString
HashMap<String, ?> map;
map = new HashMap<String, Integer>();
map = new HashMap<String, Object>();
map = new HashMap<String, String>();
변수 map 가 해시 맵을 저장할 수 있으므로 위의 모든 것이 유효 합니다. 해당 변수는 보유하고있는 해시 맵의 값 유형이 무엇인지 상관하지 않습니다.
와일드 카드를 갖는 않습니다 되지 그러나, 당신은지도에 모든 유형의 개체를 만들어 보자. 사실, 위의 해시 맵을 사용하면 map변수를 사용하여 아무것도 넣을 수 없습니다 .
map.put("A", new Integer(0));
map.put("B", new Object());
map.put("C", "Some String");
Java가 HashMap의 Value 유형을 알지 못하므로 위의 모든 메소드 호출로 인해 컴파일 타임 오류가 발생합니다. map 합니다.
여전히 해시 맵에서 값을 얻을 수 있습니다. "값의 유형을 모르지만"(변수 안에 어떤 유형의 해시 맵이 있는지 모르기 때문에) 모든 것이 서브 클래스이고 Object맵에서 나가는 것이 무엇이든 말할 수 있습니다. Object 유형이됩니다.
HashMap<String, Integer> myMap = new HashMap<>();// This variable is used to put things into the map.
myMap.put("ABC", 10);
HashMap<String, ?> map = myMap;
Object output = map.get("ABC");// Valid code; Object is the superclass of everything, (including whatever is stored our hash map).
System.out.println(output);
위의 코드 블록은 콘솔에 10을 인쇄합니다.
따라서 마무리하려면 다음 HashMap과 같이 유형이 무엇인지 신경 쓰지 않을 때 와일드 카드를 사용하십시오 (예 : 중요하지 않음) HashMap.
public static void printHashMapSize(Map<?, ?> anyMap) {
// This code doesn't care what type of HashMap is inside anyMap.
System.out.println(anyMap.size());
}
그렇지 않으면 필요한 유형을 지정하십시오.
public void printAThroughZ(Map<Character, ?> anyCharacterMap) {
for (int i = 'A'; i <= 'Z'; i++)
System.out.println(anyCharacterMap.get((char) i));
}
위의 방법에서 우리는 Map의 키가임을 알아야합니다. Character그렇지 않으면 값을 얻는 데 사용할 유형을 알 수 없습니다. toString()그러나 모든 객체에는 메소드가 있으므로 맵에는 값에 대한 모든 유형의 객체가있을 수 있습니다. 여전히 값을 인쇄 할 수 있습니다.