Если в интерфейсе маркеров нет методов, как он работает? - PullRequest
17 голосов
/ 27 декабря 2010

Я знаю, что такое маркерный интерфейс и когда нам нужно его использовать.Один вопрос до сих пор неясен для меня.Если в интерфейсе маркера нет метода или тела, как он работает во время выполнения?

Ответы [ 5 ]

22 голосов
/ 27 декабря 2010

Интерфейс маркера не «работает» как таковой. Как следует из названия, оно просто помечает класс как принадлежащий к определенному типу. Какой-то другой код должен проверить наличие маркера и сделать что-то на основе этой информации.

В наши дни аннотации часто выполняют ту же роль, что и интерфейсы маркеров ранее.

21 голосов
/ 27 декабря 2010

Единственная полезная вещь, которую вы можете сделать с ней -

if (instance instanceof MyMarkerInterface) {
   ...
}
7 голосов
/ 27 декабря 2010

Интерфейсы маркеров можно заменить аннотациями во многих местах, однако интерфейсы маркеров все еще можно использовать для

  • Проверка времени компиляции. У вас может быть метод, который должен принимать объект класса с заданным интерфейсом (ами) маркера, например

    public void myMethod(MyMarkerInterface MMI);
    

Вы не можете иметь эту проверку времени компиляции, используя только аннотацию.

Кстати: вы можете использовать два интерфейса, используя дженерики, но хорошие примеры встречаются редко.

  • Поддержка структур, которые зависят от интерфейса (ов) для определения типа компонента. как OSGi.

РЕДАКТИРОВАТЬ: я использую это для интерфейса маркера слушателя. У слушателя есть методы методов, помеченные аннотациями, но методы могут иметь любое имя или тип. Он добавляет проверку времени компиляции к тому, что иначе было бы чисто связыванием во время выполнения.

public Component implements Listener {

@ListenerCallback
public void onEventOne(EventOne... eventOneBatch) { }

@ListenerCallback
public void onEventTwo(EventTwo eventTwo) { }
}
1 голос
/ 25 января 2014

Маркерный интерфейс в Java - это интерфейсы без полей или методов, или в простом слове пустой интерфейс в Java называется маркерным интерфейсом. например Сериализуемый, Clonnable и Удаленный интерфейс. Они используются для указания сигнала или команды для компилятора или JVM. Он также может быть использован для классификации кода. Вы также можете написать свой собственный интерфейс маркеров и использовать их для логического разделения вашего кода. Кроме того, вы можете написать любую операцию предварительной обработки для этого класса.

0 голосов
/ 29 июля 2013

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

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