2013-08-19 9 views
6

में विशिष्ट विधि को लागू करने के लिए टाइप पैरामीटर को मजबूर करना equals विधि को लागू करने के लिए जावा जेनरिक में टाइप पैरामीटर को बल देने का कोई तरीका है? उदाहरण के लिए, मैंने इस वर्ग को लिखा: public class Bag<Item> implements Iterable<Item> जिसमें contains विधि है, जो Item.equals विधि का उपयोग करती है। तो मैं यह सुनिश्चित करना चाहता हूं कि जेनेरिक में उत्तीर्ण वस्तु equals विधि को भी कार्यान्वित करेगी।जावा जेनेरिक

+4

उत्तीर्ण होने के एक ** इंटरफ़ेस ** वर्ग बनाने के लिए चाहते हैं और उस प्रकार पैरामीटर के रूप में। –

+12

सभी ऑब्जेक्ट पहले ही 'बराबर() 'लागू करते हैं। – kiheru

+2

मुझे लगता है कि आप का मतलब है कि पारित वस्तुओं को 'बराबर' ओवरराइड करने के लिए मजबूर होना चाहिए, लेकिन यह ... अच्छा, अजीब है। – GGrec

उत्तर

8

आप ItemBase नामक एक सार आधार वर्ग बना सकते हैं, बराबर सार बनाते हैं और फिर Item extend ItemBase बनाते हैं।

public abstract class ItemBase { 

    @Override 
    public abstract boolean equals(Object o); 
} 

public class Bag extends ItemBase 

यह लागू करने ItemBase विशेष रूप से लागू करने के लिए किसी को भी मजबूर होना पड़ा बराबर होती है

+3

जानना अच्छा लगेगा कि जावा इसे क्यों अनुमति देता है। मेरे लिए, यह बहुरूपता का एक बहुत बड़ा उल्लंघन है और कम से कम आश्चर्य के सिद्धांत का उल्लंघन करता है (यह इंटरफेस से इतना अलग क्यों है?) –

+1

मेरे अपने प्रश्न का उत्तर देने के लिए, यह स्पष्ट रूप से जेएलएस (* "एक उदाहरण विधि है जो नहीं है सार को एक अमूर्त विधि द्वारा ओवरराइड किया जा सकता है। "*), और कुछ उदाहरण देता है: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#d5e10777। हालांकि मैं अभी भी मूल्य पर सवाल करता हूं। –

+1

हमने आज कुछ सीखा। – allprog

संबंधित मुद्दे