K
एक सामान्य बनाने पर विचार नहीं है, लेकिन एक अंतरफलक है कि आदिम आवरण लपेटता का उपयोग कर (एक डबल आवरण!)।
import java.util.HashMap;
public class NodeWrapper<K extends Comparable<K>> implements Comparable<NodeWrapper<K>> {
private static HashMap<Class, NodeWrapper> minVals = new HashMap<Class, NodeWrapper>();
private K value;
private NodeWrapper() {
super();
}
public NodeWrapper(K value, Class<K> clazz) {
super();
this.value = value;
if (minVals.get(clazz)==null) {
minVals.put(clazz, new NodeWrapper<K>());
}
}
public K getValue() {
return value;
}
public static NodeWrapper getMinValue(Class clazz){
return minVals.get(clazz);
}
public void setValue(K value) {
this.value = value;
}
@Override
public int compareTo(NodeWrapper<K> o) {
NodeWrapper min = minVals.get(this.getClass());
if (this==min && o==min) {
return 0;
} else if (this==min){
return -1;
} else if (o==min){
return 1;
} else {
return this.value.compareTo(o.value);
}
}
}
संक्षेप में, यह विचार है कि जब भी एक नया वर्ग instantiated है, एक न्यूनतम मूल्य बनाया है और एक स्थिर hashmap कि प्रत्येक वर्ग के लिए न्यूनतम मान संग्रहीत कर लेता में डाल दिया जाता है। (वास्तव में, ये मान बिल्कुल कुछ नहीं हैं, केवल एक सेंटीनेल ऑब्जेक्ट है, लेकिन चूंकि हम ऑब्जेक्ट समानता का उपयोग यह निर्धारित करने के लिए करेंगे कि कुछ मूल्य न्यूनतम है या नहीं, यह कोई समस्या नहीं है।) यह आवश्यक है कि लपेटा हुआ वस्तु तुलनीय हो सामान्य रूप से खुद के अन्य उदाहरणों के लिए।
एक दोष यह है कि जब आप getMinValue
पर कॉल करते हैं तो आपके पास कंपाइलर चेतावनियां होंगी, क्योंकि रिटर्न प्रकार की कोई सामान्य जानकारी नहीं होगी। इसके चारों ओर एक और अधिक शानदार तरीका हो सकता है, लेकिन मैं अभी इसके बारे में नहीं सोच सकता।
यह सामान्य विचार समग्र रूप से अच्छा हो सकता है। हालांकि, मुझे वास्तव में तनाव होना चाहिए: यदि आप इसे किसी भी बहुरूपता या परस्पर तुलनीय वर्गों के मिश्रण के साथ प्रयास करते हैं तो यह पूरी तरह टूट जाएगा। एक ही पेड़ में Long
एस और Integer
एस पूरी तरह से आपको नष्ट कर देगा।
स्रोत
2009-04-29 20:08:28
क्या आप कुछ नमूना कोड पेश करने में सक्षम होंगे, यह बताते हुए कि आप के का उपयोग कैसे करना चाहते हैं? –
क्या आप थोड़ा सा विस्तार कर सकते हैं? कुछ प्रासंगिक कोड अच्छा होगा। –
संयोग से, संख्यात्मक अक्षर के ऑब्जेक्ट संस्करण सभी java.lang.Number का विस्तार करते हैं। दुर्भाग्य से, संख्या में getMaximumValue() जैसी कोई चीज़ नहीं है। – Powerlord