Интерфейсы маркеров в Java?
Меня учили, что интерфейс Marker в Java является пустым интерфейсом и используется, чтобы сигнализировать компилятору или JVM, что объекты класса, реализующие этот интерфейс, должны обрабатываться особым образом, как сериализация, клонирование и т. Д.
Но в последнее время я узнал, что это на самом деле не имеет ничего общего с компилятором или JVM. Например, в случаеSerializable
интерфейс методwriteObject(Object)
изObjectOutputStream
делает что-то вродеinstanceOf Serializable
определить, реализует ли классSerializable
и броскиNotSerializableException
соответственно. Все обрабатывается в коде, и это, кажется, шаблон дизайна, поэтому я думаю, что мы можем определить наши собственные интерфейсы маркеров.
Теперь мои сомнения:
Является ли определение интерфейса маркера, упомянутое выше в 1-й точке, неправильным? Как мы можем определить интерфейс Маркер тогда?
И вместо того, чтобы использоватьinstanceOf
оператор почему метод не может быть что-то вродеwriteObject(Serializable)
так что есть проверка типов во время компиляции, а не во время выполнения?
Чем аннотации лучше, чем интерфейс маркеров?