2012-05-11 5 views
5

Quiero escribir mis propias interfaces de marcador como java.io.Serializable o Cloneable que pueden ser entendidas por JVM. Por favor sugiérame el procedimiento de implementación.podemos escribir interfaces de marcador personalizadas

Por ejemplo, implementé una interfaz llamada NotInheritable y todas las clases que implementan esta interfaz tienen que evitar la herencia.

+3

¿Qué quiere decir con 'comprensible para JVM'? –

+0

No, pero la JVM admite http://docs.oracle.com/javase/tutorial/java/IandI/final.html para marcar las clases como "no heredables". – OrangeDog

+0

La respuesta es NO, si desea crear un marcador "Interfaz de importancia", entonces no puede crear. Pero si desea crear una interfaz de marcador solo para verificar si el objeto de clase es el objeto de esa interfaz de marcador, entonces SÍ puede hacerlo. Para crear la interfaz de Marker "Comprensible para JVM", debo personalizar jvm y no estoy seguro si se puede hacer. – uniquephase

Respuesta

3
public interface MyMarkerInterface {} 

public class MyMarkedClass implements MyMarkerInterface {} 

A continuación, puede tener por ejemplo el método tomando sólo MyMarkerInterface ejemplo:

public myMethod(MyMarkerInterface x) {} 

o consulte con instanceof en tiempo de ejecución.

-3

Una interfaz de marcador es una interfaz vacía. Esto significa que solo necesita crear una interfaz y no crear ningún método en ella. Mejor explicación encontrará here.

Este enfoque se puede reemplazar con Annotations que tienen una funcionalidad similar sobre los tipos. more

+0

fabricante todavía tienen su propia importancia. – Simmant

0

Puede escribir su propia interfaz Marker, JVM no sabe nada al respecto.

Tiene que proporcionar la funcionalidad usando instanceof. check this

1

Supongamos que se debe llamar a myMethod solo si el marcador MyInterface se debe marcar allí.

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

Sí Podemos escribir nuestro propio marcador de excepción .... ver siguiente ejemplo ....

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

El ejemplo parece completamente sin sentido. ¿Por qué no solo harías que la clase Aa implemente la interfaz de marcador? – EJP

Cuestiones relacionadas