интерфейс маркера в Java - PullRequest
       2

интерфейс маркера в Java

3 голосов
/ 19 октября 2010

как создать свой собственный маркерный интерфейс в java.how, чтобы уведомить JVM к специальному классу?Может кто-нибудь это уточнить.

Заранее спасибо ....

Ответы [ 2 ]

6 голосов
/ 19 октября 2010

Вы не можете делать ничего подобного с JVM.

Ну, вы можете, но вы редко хотите это сделать. Агенты JVM могут быть подключены к JVM.

Но маркерные интерфейсы для этого не используются - они используются для маркировки классов, которые имеют право на что-то. Например, Serializable не проверяется в JVM - оно проверяется ObjectOutputStream.

Таким образом, вы можете создать public interface MyMarker {} и использовать instanceof, чтобы проверить, реализует ли данный класс его в вашей собственной логике.

Однако, начиная с Java 1.5, предпочтительным способом сделать это является аннотация (даже если вы используете агент jvm) -

public @interface MyMarker {..}

@MyMarker
public class MyClass { .. }

и затем проверьте:

object.getClass().isAnnotationPresent(MyMarker.class);
0 голосов
/ 11 июня 2015

Маркерный интерфейс в Java - это интерфейсы с без полей или методов или простым словом пустой интерфейс в Java называется маркерным интерфейсом.

Примером рыночного интерфейса являются интерфейс Serializable, Clonnable и Remote.

Интерфейс маркера используется в качестве тега для передачи сообщения компилятору java, чтобы он мог добавить особое поведение к классу, который его реализует.

Вы можете создать наш собственный интерфейс маркера.

1) Cheque.java

public interface Cheque {
}

2) BankDraft.java

public interface BankDraft {
}

3) Оплата.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 ();
     }


}
}

В приведенном выше примере я создал два пустых интерфейса Чек и BankDraft .А в Платежном классе реализован интерфейс BankDraft.В классе MainClass оба интерфейса ведут себя как тег, вывод MainClass зависит от того, какой интерфейс вы реализовали в классе Payment.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...