मैं 100% यकीन नहीं है कि यह एक अच्छा विचार है, लेकिन मैं आज कुछ कोड से टकरा गई, जो वर्तमान में लागू हो जाता है:मुझे एक जेनेरिक पैरामीटर की आवश्यकता कैसे हो सकती है जो एक इंटरफ़ेस लागू करता है?
class MyWidget <T extends Enum<T> > {
MyWidget(Map<T, Integer> valueMap) {
mValueMap = valueMap;
}
Map<T, Integer> mValueMap;
}
जहां MyWidget
तो तरीकों कि mValueMap
का उपयोग प्रदान करता है परिवर्तित करने के लिए Enum
पारित कर दिया-इन Integer
से/से।
क्या मैं इस refactor करने के लिए कोशिश कर रहा था कर विचार कर रहा था, ताकि मैं अपने गणन घोषित चाहते हैं:
interface MyInterface {
public Integer getValue();
}
enum MyEnum implements MyInterface {
foo, bar;
public Integer getValue() {
return ordinal();
}
}
और मैं तो कुछ है कि इस तरह अस्पष्ट देखा में MyWidget
के पुनर्लेखन के लिए सक्षम होगा:
public class MyWidget<T extends Enum<T> extends MyInterface> {
...
}
और फिर MyWidget
भीतर T
प्रकार की वस्तुओं पर MyInterface
से getValue()
विधि कॉल करने में सक्षम होगा। समस्या यह है कि, "<T extends Enum<T> extends MyInterface>
" वैध वाक्यविन्यास नहीं है। क्या इसे खींचने का कोई तरीका है?
मैं सिर्फ MyWidget<T extends MyInterface>
नहीं चाहता, क्योंकि यह भी महत्वपूर्ण है कि टी एक गणना हो।
अग्रिम धन्यवाद!
और वाक्यविन्यास साफ है, लेकिन मुझे लगता है कि इसका उपयोग आमतौर पर एक कोड गंध में बदल जाता है, और यह संकेत है कि आपके मॉडल के साथ कुछ सही नहीं है। – skaffman
मैं सहमत हूं (मुझे लगता है कि मैंने इसे एक या दो बार इस्तेमाल किया है, अगर ऐसा है)। लेकिन एक इंटरफ़ेस को लागू करने वाले enums के मामले में, मुझे लगता है कि यह उचित है। –
बढ़िया! यही वही है जो मैं ढूंढ रहा था। बहुत धन्यवाद! – Sbodd