නිර්නාමික පංති උත්පාදනය කිරීමෙන් වළක්වා ගැනීම සඳහා ස්ථිතික ආරම්භක යන්ත්රයක් භාවිතා කිරීමට මම කැමැත්තෙමි (එයට තවත් අරමුණක් නැත), එබැවින් මම ස්ථිතික ආරම්භකය සමඟ ආරම්භක ඉඟි ලැයිස්තුගත කරමි. සියලුම ලැයිස්තුගත විසඳුම් / ඉඟි ටයිප්-ආරක්ෂිතයි.
සටහන: සිතියම වෙනස් කළ නොහැකි බවට පත් කිරීම ගැන ප්රශ්නය කිසිවක් නොකියයි, එබැවින් මම එය අත්හරින්නෙමි, නමුත් එය පහසුවෙන් කළ හැකි බව දැන ගන්න Collections.unmodifiableMap(map).
පළමු ඉඟිය
1 වන ඉඟිය නම් ඔබට සිතියම සඳහා දේශීය සඳහනක් කළ හැකි අතර ඔබ එයට කෙටි නමක් ලබා දේ:
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");
}
දෙවන ඉඟිය
දෙවන ඉඟිය නම්, ඇතුළත් කිරීම් එකතු කිරීම සඳහා ඔබට උපකාරක ක්රමයක් නිර්මාණය කළ හැකිය; ඔබට අවශ්ය නම් මෙම සහායක ක්රමය ප්රසිද්ධ කළ හැකිය:
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);
}
මෙහි ඇති උපකාරක ක්රමය නැවත භාවිතා කළ නොහැකි වුවද එයට මූලද්රව්ය එකතු කළ හැකි බැවිනි myMap2. එය නැවත භාවිතයට ගත හැකි වන පරිදි, අපට සිතියම උපකාරක ක්රමයේ පරාමිතියක් බවට පත් කළ හැකි නමුත් ආරම්භක කේතය කෙටි නොවේ.
තෙවන ඉඟිය
3 වන ඉඟිය නම්, ජනගහන ක්රියාකාරිත්වය සමඟ නැවත භාවිතා කළ හැකි තනන්නෙකු වැනි උපකාරක පන්තියක් ඔබට නිර්මාණය කළ හැකිය. මෙය සැබවින්ම සරල, පේළි 10 ක උපකාරක පන්තියකි.
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
}
}