Interfaces de marcador en Java?

Me enseñaron que la interfaz Marker en Java es una interfaz vacía y se utiliza para indicar al compilador o JVM que los objetos de la clase que implementan esta interfaz deben tratarse de una manera especial, como la serialización, la clonación, etc.

Pero últimamente he aprendido que en realidad no tiene nada que ver con el compilador o la JVM. Por ejemplo, en caso deSerializable interfaz del métodowriteObject(Object) deObjectOutputStream hace algo comoinstanceOf Serializable para detectar si la clase implementaSerializable y tirosNotSerializableException en consecuencia. Todo se maneja en el código y esto parece ser un patrón de diseño, por lo que creo que podemos definir nuestras propias interfaces de marcador.

Ahora mis dudas:

¿Es incorrecta la definición de una interfaz de marcador mencionada anteriormente en el primer punto? ¿Cómo podemos definir una interfaz Marker entonces?

Y en lugar de usar elinstanceOf operador por qué el método no puede ser algo comowriteObject(Serializable) para que haya una comprobación de tipo en tiempo de compilación en lugar de tiempo de ejecución?

¿Cómo son las anotaciones mejores que las interfaces de marcador?

Respuestas a la pregunta(10)

Su respuesta a la pregunta