Интерфейсы маркеров в Java?

Меня учили, что интерфейс Marker в Java является пустым интерфейсом и используется, чтобы сигнализировать компилятору или JVM, что объекты класса, реализующего этот интерфейс, должны обрабатываться особым образом, например, сериализация, клонирование и т. Д.

Но в последнее время я узнал, что это на самом деле не имеет ничего общего с компилятором или JVM. Например, в случае интерфейса Serializable метод writeObject(Object) из ObjectOutputStream делает что-то вроде instanceOf Serializable, чтобы определить, реализует ли класс Serializable и throws NotSerializableException соответственно. Все обрабатывается в коде, и это, кажется, шаблон дизайна, поэтому я думаю, что мы можем определить наши собственные интерфейсы маркеров.

Теперь мои сомнения:

  1. Является ли определение интерфейса маркера, упомянутое выше в 1-й точке, неверным? Как тогда мы можем определить интерфейс Marker?

  2. И вместо использования оператора instanceOf, почему метод не может быть чем-то вроде writeObject(Serializable), так что есть время компиляции проверка типов, а не время выполнения?

  3. Чем аннотации лучше, чем интерфейс маркеров?

129
задан Unihedron 14 October 2014 в 17:36
поделиться