2010-10-19 8 views
3

comment créer votre propre interface de marqueur dans java.how pour notifier la JVM pour traiter comme classe spéciale? Quelqu'un peut-il l'élaborer.interface de marqueur dans Java

Merci à l'avance ....

+1

Quel genre de «spécial» avez-vous en tête? – djna

Répondre

6

Vous ne pouvez pas faire quelque chose comme ça avec la machine virtuelle Java.

Eh bien, vous pouvez, mais vous voulez rarement le faire. JVM agents peut être «branché» dans la JVM.

Mais les interfaces de marqueur ne sont pas utilisées pour cela - elles sont utilisées pour marquer les classes qui sont éligibles pour quelque chose. Serializable par exemple n'est pas vérifié dans la JVM - il est vérifié par le ObjectOutputStream.

Vous pouvez donc créer public interface MyMarker {} et utiliser instanceof pour vérifier si une classe donnée l'implémente, dans votre propre logique.

Cependant, depuis Java 1.5, la meilleure façon de le faire est par le biais d'une annotation (même si vous utilisez un agent jvm) -

public @interface MyMarker {..} 

@MyMarker 
public class MyClass { .. } 

puis vérifiez:

object.getClass().isAnnotationPresent(MyMarker.class); 
0

Marker interface en Java est interfaces avec aucun champ ou méthodes ou en simple mot interface vide en Java est appelée interface de marqueur.

Des exemples d'interface de marché sont Serializable, Clonnable et Remote.

L'interface de marqueur est utilisée comme une balise pour transmettre un message au compilateur java afin qu'il puisse ajouter un comportement spécial à la classe qui l'implémente.

Vous pouvez créer notre propre interface de marqueur.

1) Cheque.java

public interface Cheque { 
} 

2) BankDraft.java

public interface BankDraft { 
} 

3) Payment.java

public class Payment implements BankDraft{ 

public void paymentByCheque() { System.out.println("Payment By Cheque"); }

public void paymentByBankDraft() { 


    System.out.println("Payment by Draft"); 


} 
} 

4) MainClass.java

public class MainClass { 

public static void main(String[] args) { Payment p = new Payment();

 if (p instanceof Cheque) { 
     p.paymentByCheque(); 
    } 

    if (p instanceof BankDraft) { 
      p.paymentByBankDraft(); 
    } 


} 
} 

Dans l'exemple ci-dessus, j'ai créé deux interfaces videsVérifier et Bankdraft. Et la classe de paiement implémentée interface BankDraft. Dans la classe MainClass, les deux interfaces se comportent comme des balises, la sortie de MainClass dépend de l'interface que vous avez implémentée dans la classe Payment.

Espérons que cela aidera.