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

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

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

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

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

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

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

Ответы на вопрос(10)

Ваш ответ на вопрос