hash1
Bir HashMap<String, ?>
değişken olarak bildirmek , değişkenin bir anahtarı olan ve herhangi bir değer türüne sahip hash1
olabileceğini belirtir .HashMap
String
HashMap<String, ?> map;
map = new HashMap<String, Integer>();
map = new HashMap<String, Object>();
map = new HashMap<String, String>();
Yukarıdakilerin hepsi geçerlidir, çünkü değişken map
bu karma haritalardan herhangi birini saklayabilir. Bu değişken Değer türünün ne olduğu, sahip olduğu hasminin umrunda değil.
Bir joker olması gelmez değil , ancak, haritanıza nesne her türlü etsinler. Aslında, yukarıdaki karma harita ile, map
değişkeni kullanarak içine hiçbir şey koyamazsınız :
map.put("A", new Integer(0));
map.put("B", new Object());
map.put("C", "Some String");
Yukarıdaki yöntem çağrılarının tümü derleme zamanı hatasına neden olur, çünkü Java içindeki HashMap'in Değer türünün ne olduğunu bilmez map
.
Hala karma haritadan bir değer elde edebilirsiniz. "Değerin türünü bilmiyor olsanız da" (değişkeninizin içinde ne tür bir karma harita olduğunu bilmediğiniz için), her şeyin bir alt sınıf olduğunu Object
ve dolayısıyla haritadan ne çıkardığınızı söyleyebilirsiniz. Object türünde olacaktır:
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);
Yukarıdaki kod bloğu 10'u konsola yazdıracaktır.
Bu nedenle, bitirmek için, HashMap
türlerinin ne olduğunu umursamadığınızda (yani önemli değil) joker karakterli bir kullanın HashMap
, örneğin:
public static void printHashMapSize(Map<?, ?> anyMap) {
// This code doesn't care what type of HashMap is inside anyMap.
System.out.println(anyMap.size());
}
Aksi takdirde, ihtiyacınız olan türleri belirtin:
public void printAThroughZ(Map<Character, ?> anyCharacterMap) {
for (int i = 'A'; i <= 'Z'; i++)
System.out.println(anyCharacterMap.get((char) i));
}
Yukarıdaki yöntemde, Harita'nın anahtarının bir olduğunu bilmemiz gerekir Character
, aksi takdirde değer almak için hangi türün kullanılacağını bilemeyiz. toString()
Bununla birlikte, tüm nesnelerin bir yöntemi vardır, böylece harita değerleri için herhangi bir nesne türüne sahip olabilir. Değerleri yine de yazdırabiliriz.