2012-05-11 15 views
5

java.io.SerializableまたはCloneableのような独自のマーカーインターフェイスを作成して、JVMで理解できるようにしたいと考えています。実装手順を教えてください。私たちはカスタムマーカーインターフェイスを書くことができます

たとえば、NotInheritableというインターフェイスを実装しました。このインターフェイスを実装するすべてのクラスは、継承を避けなければなりません。

public myMethod(MyMarkerInterface x) {} 

するか、実行時にinstanceofに確認してください:

+3

....次の例を参照してください....私たち自身のマーカーの例外を書くことができますか? –

+0

いいえ、JVMはクラスを「継承できない」とマークするためにhttp://docs.oracle.com/javase/tutorial/java/IandI/final.htmlをサポートしています。 – OrangeDog

+0

答えはいいえ、「重要なインターフェース」のマーカーを作成する場合は作成できません。しかし、あなたがクラスオブジェクトがそのマーカインタフェースのオブジェクトであるかどうかをチェックするだけでマーカインタフェースを作成したいなら、そうすることができます。 Markerインターフェース「JVMに理解できる」を作成するにはjvmをカスタマイズする必要があります。 – uniquephase

答えて

3
public interface MyMarkerInterface {} 

public class MyMarkedClass implements MyMarkerInterface {} 

その後、例えばメソッドは、MyMarkerInterfaceインスタンスを取っていることができます。

-3

マーカーインターフェイスは空のインターフェイスです。つまり、インタフェースを作成し、その中にメソッドを作成しないでください。より良い説明はhereです。

このアプローチは、タイプに対して同様の機能を持つAnnotationsに置き換えることができます。 more

+0

メーカーには依然として重要性があります。 – Simmant

0

あなた自身のマーカーインターフェイスを書くことができます.JVMはそれについて何も知らない。

instanceofを使用して機能を提供する必要があります。 check this

1

マーカーMyInterfaceをマークする必要がある場合にのみ、myMethodを呼び出す必要があるとします。

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

はい私たちは、あなたがJVM`に `理解できるとはどういう意味ですか

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

例はまったく意味がないようです。なぜAaクラスにマーカーインターフェイスを実装させるだけではないのですか? – EJP

関連する問題