2012-05-11 3 views
5

Я хочу написать свои собственные интерфейсы маркеров, например java.io.Serializable или Cloneable, которые могут быть понятны JVM. Пожалуйста, предложите мне процедуру внедрения.мы можем написать пользовательские интерфейсы маркеров

Например, я реализовал интерфейс под названием NotInheritable, и все классы, реализующие этот интерфейс, должны избегать наследования.

+3

Что вы имеете в виду 'понятным JVM'? –

+0

Нет, но JVM поддерживает http://docs.oracle.com/javase/tutorial/java/IandI/final.html, чтобы пометить классы как «не наследуемые». – OrangeDog

+0

Ответ НЕТ, Если вы хотите создать какой-либо маркер «Интерфейс значимости», то вы не можете создать его. Но если вы хотите создать интерфейс-маркер, чтобы проверить, является ли объект класса объектом этого интерфейса-маркера, тогда вы можете. Для создания интерфейса маркера «Понятно JVM» jvm необходимо настроить, и я не уверен, что это можно сделать. – 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

Пример кажется совершенно бессмысленным. Почему бы вам просто не реализовать класс Aa интерфейса маркера? – EJP

Смежные вопросы