Interfaces de marcadores em Java?
Eu estava aprendendo que a interface Marker em Java é uma interface vazia e é usada para sinalizar ao compilador ou JVM que os objetos da classe que implementam essa interface devem ser tratados de uma maneira especial, como serialização, clonagem etc.
Mas ultimamente eu aprendi que ele realmente não tem nada a ver com o compilador ou a JVM. Por exemplo, no caso deSerializable
interface do métodowriteObject(Object)
doObjectOutputStream
faz algo comoinstanceOf Serializable
para detectar se a classe implementaSerializable
& lançaNotSerializableException
adequadamente. Tudo é tratado no código e isso parece ser um padrão de design, então acho que podemos definir nossas próprias interfaces de marcador.
Agora minhas dúvidas:
A definição de uma interface de marcador mencionada acima no 1º ponto está errada? Como podemos definir uma interface de marcador então?
E em vez de usar oinstanceOf
operador por que o método não pode ser algo comowriteObject(Serializable)
para que haja uma verificação do tipo em tempo de compilação em vez de tempo de execução?
Como as anotações são melhores que as interfaces de marcador?