Yanıtlar:
Java'da ilkel türleri genel argümanlar olarak kullanamazsınız. Bunun yerine kullanın:
Map<String, Integer> myMap = new HashMap<String, Integer>();
İle otomatik boks / unboxing kodunda küçük bir fark yoktur. Otomatik kutulama, yazabileceğiniz anlamına gelir:
myMap.put("foo", 3);
onun yerine:
myMap.put("foo", new Integer(3));
Otomatik kutulama, ilk sürümün dolaylı olarak ikinciye dönüştürüldüğü anlamına gelir. Otomatik kutudan çıkarma, yazabileceğiniz anlamına gelir:
int i = myMap.get("foo");
onun yerine:
int i = myMap.get("foo").intValue();
Örtük çağrı intValue()
, anahtar bulunmazsa bunun bir oluşturacağı anlamına gelir NullPointerException
, örneğin:
int i = myMap.get("bar"); // NullPointerException
Nedeni, tür silme . Diyelim ki, C # 'da genel türler çalışma zamanında tutulmaz. Bunlar, sizi bunu yapmaktan kurtaracak açık döküm için sadece "sözdizimsel şekerdir":
Integer i = (Integer)myMap.get("foo");
Size bir örnek vermek gerekirse, bu kod tamamen yasaldır:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove bunu destekler ancak jenerik kullanmaz. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
İçinde ilkel türleri kullanamazsınız HashMap
. int
veya double
çalışmıyor. Çevreleyen tipini kullanmalısınız. örnek olarak
Map<String,Integer> m = new HashMap<String,Integer>();
Şimdi ikisi de nesne, bu yüzden bu işe yarayacak.
int ilkel bir türdür, burada java'da ilkel bir türün ne anlama geldiğini okuyabilirsiniz ve Harita, girdi olarak nesnelere sahip bir arabirimdir:
public interface Map<K extends Object, V extends Object>
nesne bir sınıf anlamına gelir ve aynı zamanda ondan genişleyen başka bir sınıf yaratabileceğiniz anlamına gelir, ancak int'ten genişleyen bir sınıf oluşturamazsınız. Yani int değişkenini bir nesne olarak kullanamazsınız. Sorununuz için yedek çözümlerim var:
Map<String, Integer> map = new HashMap<>();
veya
Map<String, int[]> map = new HashMap<>();
int x = 1;
//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);
//get the value of x
int y = map.get("x")[0];
Başvuru türünü ilkel tür değil genel bağımsız değişkenlerde kullanabilirsiniz. Yani burada kullanmalısın
Map<String, Integer> myMap = new HashMap<String, Integer>();
ve değeri saklayın
myMap.put("abc", 5);