2014-12-20 24 views
5

में विरासत मैंने एक एएनबी एबीसी और एक क्लास टेस्ट दिया है और मुझे कुछ कॉल करना है लेकिन मैं पैरामीटर के रूप में एबीसी एनम पास नहीं कर सकता।एनम

enum ABC{ 
    A,B,C; 
} 

Class Test{ 

    public void doSomething(ABC abc) 
    { 
    //some work 
    } 

} 

यहाँ मैं एक enum डीईएफ़ कि एबीसी के सभी सदस्य होना चाहिए चाहते हैं और यह भी enum XYZ (मैं एक enum डीईएफ़ कि दो enums (एबीसी और XYZ) के सदस्यों को शामिल करना चाहिए चाहते हैं) के सदस्य होना चाहिए। इस तरह का उदाहरण।

enum DEF 
{ 
    A,B,C,X,Y,Z,D; 
} 

enum xyz{ 
    X,Y,Z; 
} 

ताकि मैं ऐसा कुछ कर सकूं जो कुछ एबीसी enum पैरामीटर के रूप में लेता है। मैं DEF.Example

class Demo{ 

    public static void main(String[] ags) 
    { 
     Test test= new Test(); 
     test.doSomething(DEF.A); 
     } 

} 

मैं नवसिखुआ हूँ के साथ DoSomething() विधि कॉल करना चाहते हैं। कृपया मुझे कोई मदद या सुझाव प्रदान करें। मैं आपका आभारी रहूंगा।

+1

आप 'एनम' का विस्तार नहीं कर सकते हैं। हालांकि आप 'मायइंटरफेस' को एक विधि 'doSomething()' के साथ इंटरफ़ेस बना सकते हैं, और फिर 'एबीसी' और' XYZ 'दोनों को' MyInterface 'लागू कर सकते हैं। इस तरह आप छः 'enum' स्थिरांक में से किसी पर 'doSomething()' को कॉल कर सकते हैं। –

उत्तर

9

जावा में एनम्स final हैं, जिसका अर्थ है कि आप विस्तार और enum (आप मौजूदा enum में अधिक मूल्य नहीं जोड़ सकते हैं) कर सकते हैं। आपके मामले में ABC और DEF enum वस्तुओं के समान नामों के साथ पूरी तरह से अलग इकाइयां हैं। यह उदाहरण के लिए implicates कि ABC.A != DEF.A

इसे संभालने के कई तरीके हैं, हालांकि उनमें से कोई भी सही या सरल नहीं है। आपको अपने विशिष्ट मामले में क्या आवश्यक है, इसका विकास करना चाहिए।

interface MyInterface{ 

} 

enum ABC implements MyInterface{ 
    A,B,C; 
} 

enum DEF implements MyInterface{ 
    A,B,C,X,Y,Z,D; 

} 

इस तरह आप दोनों ABC और doSomething() में DEF उपयोग कर सकते हैं:

Class Test{ 

    public void doSomething(MyInterface abc) 
    { 
    //some work 
    } 

} 

अन्य दृष्टिकोण

कि संभाल करने

सबसे पहले जिस तरह से एक आम इंटरफ़ेस है, जो अपने enums विस्तार कर सकते हैं बनाने के लिए है अपनी कक्षा में जेनेरिक जोड़ना है। इस तरह जो निर्दिष्ट enum का समर्थन करेंगे आप ठोस क्रियान्वयन कर सकें:

class GenericTest<E extends Enum<E>>{ 
    public void doSomething(E enum){ 
    } 
} 

class TestWhichAcceptsABC extends GenericTest<ABC>{} 

class TestWhichAcceptsDEF extends GenericTest<DEF>{} 

तीसरा रास्ता प्रत्येक enum जो

नियंत्रित किया जा करने की जरूरत है
Class Test{ 

    public void doSomething(ABC abc) 
    { 
    //some work 
    } 

    public void doSomething(DEF abc) 
    { 
    //some work 
    } 

} 

अधिक विचार कैसे के लिए This thread देखें के लिए, कई तरीकों बनाने के लिए एक है enum विरासत को हल करने के लिए।

1

भले ही आपने उसी नाम में उल्लेख किया हो, यह enum में समान नहीं है। उदाहरण के लिए ABC एबीसी का उदाहरण है। लेकिन ए DEF में डीईएफ का उदाहरण है। तो यह अलग है। आप enum में इंटरफ़ेस लागू कर सकते हैं।

enum ABC implements X{ 
    A,B,C; 
} 

public class Test{ 

    public void doSomething(X x) 
    { 

    } 
} 

आप इसे आजमाएंगे।

-2

आप enums का विस्तार नहीं कर सकते हैं लेकिन आप एक enum के व्यवहार को अनुकरण करके अगली सबसे अच्छी बात कर सकते हैं। आप स्थिर मूल्य वाले वर्ग बना सकते हैं। इस प्रकार सं.

public class abc extends yxz { 
    public static final int A = 1; 
    public static final int B = 2; 
    public static final int C = 3; 
}