Mendeklarasikan hash1
sebagai HashMap<String, ?>
menentukan bahwa variabel hash1
dapat menampung apa saja HashMap
yang memiliki kunci String
dan jenis nilai apa pun.
HashMap<String, ?> map;
map = new HashMap<String, Integer>();
map = new HashMap<String, Object>();
map = new HashMap<String, String>();
Semua hal di atas valid, karena variabel map
dapat menyimpan peta hash mana pun. Variabel itu tidak peduli apa jenis Nilai, dari hashmap yang dimilikinya.
Memiliki wildcard tidak tidak , bagaimanapun, membiarkan Anda menempatkan jenis objek ke dalam peta Anda. Faktanya, dengan hash map di atas, Anda tidak dapat memasukkan apa pun ke dalamnya menggunakan map
variabel:
map.put("A", new Integer(0));
map.put("B", new Object());
map.put("C", "Some String");
Semua panggilan metode di atas akan menghasilkan kesalahan waktu kompilasi karena Java tidak tahu apa tipe Nilai dari HashMap di dalamnya map
.
Anda masih bisa mendapatkan nilai dari peta hash. Meskipun Anda "tidak tahu jenis nilainya", (karena Anda tidak tahu jenis peta hash apa yang ada di dalam variabel Anda), Anda dapat mengatakan bahwa semuanya adalah subkelas dari Object
dan, jadi, apa pun yang Anda dapatkan dari peta akan menjadi tipe Object:
HashMap<String, Integer> myMap = new HashMap<>();
myMap.put("ABC", 10);
HashMap<String, ?> map = myMap;
Object output = map.get("ABC");
System.out.println(output);
Blok kode di atas akan mencetak 10 ke konsol.
Jadi, untuk menyelesaikannya, gunakan a HashMap
with wildcard bila Anda tidak peduli (tidak masalah) apa jenisnya HashMap
, misalnya:
public static void printHashMapSize(Map<?, ?> anyMap) {
System.out.println(anyMap.size());
}
Jika tidak, tentukan jenis yang Anda butuhkan:
public void printAThroughZ(Map<Character, ?> anyCharacterMap) {
for (int i = 'A'; i <= 'Z'; i++)
System.out.println(anyCharacterMap.get((char) i));
}
Dalam metode di atas, kita perlu tahu bahwa kunci Map adalah a Character
, jika tidak, kita tidak akan tahu tipe apa yang digunakan untuk mendapatkan nilai darinya. Semua objek memiliki toString()
metode, bagaimanapun, sehingga peta dapat memiliki tipe objek apa pun untuk nilainya. Kami masih bisa mencetak nilainya.