Saya lebih suka menggunakan penginisialisasi statis untuk menghindari menghasilkan kelas anonim (yang tidak memiliki tujuan lebih lanjut), jadi saya akan daftar tips inisialisasi dengan penginisialisasi statis. Semua solusi / tip yang tercantum adalah tipe-aman.
Catatan: Pertanyaannya tidak mengatakan apa pun tentang membuat peta tidak dapat dimodifikasi, jadi saya akan mengabaikannya, tetapi tahu bahwa itu dapat dengan mudah dilakukan Collections.unmodifiableMap(map)
.
Kiat pertama
Kiat pertama adalah Anda dapat membuat referensi lokal ke peta dan Anda memberinya nama PENDEK:
private static final Map<Integer, String> myMap = new HashMap<>();
static {
final Map<Integer, String> m = myMap; // Use short name!
m.put(1, "one"); // Here referencing the local variable which is also faster!
m.put(2, "two");
m.put(3, "three");
}
Tip kedua
Kiat kedua adalah Anda bisa membuat metode pembantu untuk menambahkan entri; Anda juga dapat membuat metode penolong ini menjadi publik jika Anda ingin:
private static final Map<Integer, String> myMap2 = new HashMap<>();
static {
p(1, "one"); // Calling the helper method.
p(2, "two");
p(3, "three");
}
private static void p(Integer k, String v) {
myMap2.put(k, v);
}
Metode helper di sini tidak dapat digunakan kembali karena hanya dapat menambahkan elemen myMap2
. Untuk membuatnya dapat digunakan kembali, kita bisa menjadikan peta itu sendiri sebagai parameter dari metode helper, tetapi kemudian kode inisialisasi tidak akan lebih pendek.
Tip ketiga
Kiat ke-3 adalah Anda dapat membuat kelas pembantu seperti pembangun yang dapat digunakan kembali dengan fungsionalitas populating. Ini benar-benar kelas pembantu sederhana 10-baris yang aman untuk jenis:
public class Test {
private static final Map<Integer, String> myMap3 = new HashMap<>();
static {
new B<>(myMap3) // Instantiating the helper class with our map
.p(1, "one")
.p(2, "two")
.p(3, "three");
}
}
class B<K, V> {
private final Map<K, V> m;
public B(Map<K, V> m) {
this.m = m;
}
public B<K, V> p(K k, V v) {
m.put(k, v);
return this; // Return this for chaining
}
}