2015-05-02 2 views
1

Я знаю что-то о «интерфейсе маркера», интерфейс маркера не имеет членов. Например: Serialiazable, Cloneable и т. Д.Какова внутренняя реализация интерфейса маркера?

Я нашел в googling, что интерфейс маркера предназначен для отправки некоторых инструкций JVM? I want to know what are those instructions и как я мог понять? Пожалуйста, помогите мне с примером реального мира.

+1

Посмотрите на это «[* Маркерные интерфейсы в Java *] (http://stackoverflow.com/q/9858708/1364007)». –

ответ

2

Интерфейс маркера - это средство обозначения того, что класс есть или что-то делает, и даже эти вещи не выражаются как фактические методы. Например Serialiazable, Cloneable и т.д. А так как введены аннотации, они почти всегда предпочитали, хотя они не могут полностью заменить интерфейс маркеров, как это было предложено Джошуа Блох

... Вы можете слышать, что маркерные аннотации (Пункт 35) make marker интерфейсы устарели. Это утверждение неверно. Маркерные интерфейсы имеют два преимущества перед аннотациями маркеров. Прежде всего, интерфейсы маркеров определяют тип, который реализуется экземплярами маркированного класса; маркерных аннотаций нет. Существование этого типа позволяет отлавливать ошибки во время компиляции, что вы не могли поймать до выполнения, если вы использовали маркер аннотацию ....

В случае Serializable, класс реализует этот интерфейс указывают, что его непереходные элементы данных могут быть записаны в ObjectOutputStream. Кроме того, сериализованный объект должен сохранять совместимость между системами, и это явное дизайнерское решение и, следовательно, требует использования интерфейса маркера для идентификации таких кандидатов.

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

+0

Последнее предложение очень неясно выражено. «Реализация« Cloneable »сообщает JVM, что этот класс реализует« Cloneable »- это простая тавтология. – EJP

1

найден в googling, что интерфейс маркера предназначен для отправки некоторых инструкций в JVM?

Нет. Они используются как маркер для другого кода Java.

Я хочу знать, каковы эти инструкции

Это не более экзотическое, что испытания instanceof.

1

Интерфейс маркера не имеет реализации.

Однако интерфейс маркера, как правило, влияет на поведение некоторых других классов.

Я нашел в googling, что интерфейс маркера предназначен для отправки некоторых инструкций JVM?

Это неверно.

Что он делает, это предоставление информации либо JVM, либо классам, предоставленным или запущенным на JVM. Информация НЕ представляет собой «инструкции». Скорее это ярлык на уровне класса.

Например, если вы объявляете класс как Serializable, вы передаете информацию ObjectInputStream и ObjectOutputStream о том, что экземпляры этого класса могут быть сериализованы. Вы передаете эту информацию в виде самого класса; то есть ObjectInputStream и ObjectOutputStream могут использовать instanceof (или эквивалент) для проверки возможности сериализации объекта.

Пожалуйста, помогите мне с примером реального мира.

Serializable и Cloneable являются известными примерами в библиотеках классов Java.

Существуют и другие интерфейсы, которые имеют «маркер-интерфейс». Например, Closeable и Autocloseable оба имеют один метод close(), который делает то же самое. Разница в том, что AutoCloseable рассматривается как маркер с помощью инструкции «попробуйте с ресурсами».

И, наконец, ничего не стоит того, что интерфейсы маркеров не одобряются пуристами дизайна OO. Вы можете достичь той же цели, используя аннотации Java.

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