2012-05-11 10 views
5

मैं java.io.Serializable या Cloneable जो JVM करने के लिए समझ में आता है हो सकता है की तरह अपने ही मार्कर इंटरफेस लिखना चाहते हैं लिख सकते हैं। कृपया मुझे कार्यान्वयन प्रक्रिया का सुझाव दें।हम कस्टम मार्कर इंटरफेस

उदाहरण के लिए मैं एक इंटरफ़ेस NotInheritable बुलाया कार्यान्वित किया है और सभी वर्गों के इस इंटरफेस को लागू करने विरासत से बचने के लिए है।

+3

क्या आप 'समझ में आता है मतलब है JVM' के लिए? –

+0

नहीं, लेकिन JVM वर्गों को "विरासत में नहीं" के रूप में चिह्नित करने के लिए http://docs.oracle.com/javase/tutorial/java/IandI/final.html का समर्थन करता है। – OrangeDog

+0

उत्तर नहीं है, यदि आप किसी भी मार्कर "महत्व का इंटरफेस" बनाना चाहते हैं तो आप नहीं बना सकते हैं। लेकिन अगर आप मार्कर इंटरफ़ेस बनाना चाहते हैं तो यह जांचने के लिए कि क्लास ऑब्जेक्ट उस मार्कर इंटरफ़ेस का ऑब्जेक्ट है या नहीं, फिर भी आप कर सकते हैं। मार्कर इंटरफेस बनाने के लिए "जेवीएम के लिए समझने योग्य" जेवीएम को अनुकूलित करने की आवश्यकता है और मुझे यकीन नहीं है कि यह किया जा सकता है या नहीं। – uniquephase

उत्तर

3
public interface MyMarkerInterface {} 

public class MyMarkedClass implements MyMarkerInterface {} 

तो फिर तुम उदाहरण के लिए विधि केवल MyMarkerInterface उदाहरण ले जा सकता है:

public myMethod(MyMarkerInterface x) {} 

या रनटाइम पर instanceof से संपर्क करें।

-3

एक मार्कर इंटरफ़ेस एक खाली इंटरफ़ेस है। इसका मतलब है कि आपको बस एक इंटरफ़ेस बनाने की आवश्यकता है और इसमें कोई भी विधि न बनाएं। बेहतर स्पष्टीकरण आपको here मिलेगा।

यह दृष्टिकोण Annotations प्रकारों पर इसी तरह की सुविधा है साथ प्रतिस्थापित किया जा सकता है। more

+0

निर्माता अभी भी अपना महत्व है। – Simmant

0

आप अपनी खुद की मार्कर इंटरफ़ेस लिख सकते हैं, JVM इसके बारे में कुछ पता नहीं है।

आप instanceof का उपयोग करके सुविधा प्रदान करने के लिए है। check this

1

मान लीजिए MyMethod बुलाया जाना चाहिए तभी जब मार्कर MyInterface वहाँ चिह्नित किया जाना चाहिए।

interface MyInterface{} 

class MyException extends RuntimeException{ 

    public MyException(){} 
    public MyException(String message){ 
     super(message); 
    } 
} 

class MyClass implements MyInterface{ 
    public void myMethod(){ 
     if(!(this instanceOf MyInterface)){ 
      throw new MyException(); 
     }else{ 
      // DO YOUR WORK 
     } 
    } 
} 
2

हाँ हम अपने मार्कर अपवाद लिख सकते हैं .... उदाहरण निम्न देखें ....

interface Marker{ 
} 

class MyException extends Exception { 

    public MyException(String s){ 
     super(s); 
    } 
} 

class A implements Marker { 

    void m1() throws MyException{   
    if((this instanceof Marker)){ 
     System.out.println("successfull"); 
    } 
    else { 
     throw new MyException("Unsuccessful class must implement interface Marker "); 
    }  
} 
} 

/* Class B has not implemented Maker interface . 
* will not work & print unsuccessful Must implement interface Marker 
*/ 
class B extends A {  


} 

// Class C has not implemented Maker interface . Will work & print successful 

public class C extends A implements Marker 
{ // if this class will not implement Marker, throw exception 
    public static void main(String[] args) { 
    C a= new C(); 
    B b = new B(); 

    try { 
     a.m1(); // Calling m1() and will print 
     b.m1(); 
    } catch (MyException e) { 

     System.out.println(e); 
    } 

} 
} 

OUTOPUT

+1

उदाहरण पूरी तरह से व्यर्थ लगता है। मार्कर इंटरफ़ेस को लागू करने के लिए आपके पास क्लास एए क्यों नहीं होगा? – EJP

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