නිර්නාමික පංති උත්පාදනය කිරීමෙන් වළක්වා ගැනීම සඳහා ස්ථිතික ආරම්භක යන්ත්රයක් භාවිතා කිරීමට මම කැමැත්තෙමි (එයට තවත් අරමුණක් නැත), එබැවින් මම ස්ථිතික ආරම්භකය සමඟ ආරම්භක ඉඟි ලැයිස්තුගත කරමි. සියලුම ලැයිස්තුගත විසඳුම් / ඉඟි ටයිප්-ආරක්ෂිතයි.
සටහන: සිතියම වෙනස් කළ නොහැකි බවට පත් කිරීම ගැන ප්රශ්නය කිසිවක් නොකියයි, එබැවින් මම එය අත්හරින්නෙමි, නමුත් එය පහසුවෙන් කළ හැකි බව දැන ගන්න 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
}
}