Java'da statik bir `Map'i nasıl başlatırsınız?
Birinci yöntem: statik başlatıcı
İkinci yöntem: örnek başlatıcı (anonim alt sınıf)
veya
başka bir yöntem mi?
Her birinin artıları ve eksileri nelerdir?
İşte iki yöntemi gösteren bir örnek:
import java.util.HashMap;
import java.util.Map;
public class Test {
private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
static {
myMap.put(1, "one");
myMap.put(2, "two");
}
private static final Map<Integer, String> myMap2 = new HashMap<Integer, String>(){
{
put(1, "one");
put(2, "two");
}
};
}
Örnek başlatıcı bu durumda sadece sözdizimsel şekerdir, değil mi? Sadece başlatmak için neden ekstra bir anonim sınıfa ihtiyacınız olduğunu anlamıyorum. Ve eğer oluşturulan sınıf final ise çalışmayacaktır.
Statik bir başlatıcı kullanarak da değişmez bir harita oluşturabilirsiniz:
public class Test {
private static final Map<Integer, String> myMap;
static {
Map<Integer, String> aMap = ....;
aMap.put(1, "one");
aMap.put(2, "two");
myMap = Collections.unmodifiableMap(aMap);
}
}
İkinci yöntemin bir avantajı, koleksiyonu daha sonra hiçbir şeyin güncellemeyeceğini garanti etmek için Collections.unmodifiableMap()
ile sarabilmenizdir:
private static final Map<Integer, String> CONSTANT_MAP =
Collections.unmodifiableMap(new HashMap<Integer, String>() {{
put(1, "one");
put(2, "two");
}});
// later on...
CONSTANT_MAP.put(3, "three"); // going to throw an exception!