Mir wurde beigebracht, dass die Marker-Schnittstelle in Java eine leere Schnittstelle ist und dem Compiler oder der JVM signalisiert, dass die Objekte der Klasse, die diese Schnittstelle implementieren, auf besondere Weise behandelt werden müssen, z. B. Serialisieren, Klonen usw.
Aber in letzter Zeit habe ich gelernt, dass es eigentlich nichts mit dem Compiler oder der JVM zu tun hat. Zum Beispiel im Fall der Serializable
Schnittstelle der Methode writeObject(Object)
der ObjectOutputStream
tut , wie etwas instanceOf Serializable
zu erkennen , ob die Klasse implementiert Serializable
und führt NotSerializableException
entsprechend. Alles wird im Code behandelt und dies scheint ein Entwurfsmuster zu sein, so dass wir meiner Meinung nach unsere eigenen Markierungsschnittstellen definieren können.
Nun meine Zweifel:
Ist die oben im 1. Punkt erwähnte Definition einer Marker-Schnittstelle falsch? Wie können wir dann eine Marker-Schnittstelle definieren?
Und anstatt den
instanceOf
Operator zu verwenden, warum kann die Methode nichtwriteObject(Serializable)
so sein, dass eine Typprüfung zur Kompilierungszeit statt zur Laufzeit erfolgt?Wie sind Anmerkungen besser als Markierungsschnittstellen?
Serializable
als Annotation ist Unsinn und@NonNull
als Schnittstelle ist Unsinn. Ich würde sagen: Anmerkungen sind Marker + Metadaten. Übrigens: Forefunner of Annotations war XDoclet, geboren in Javadoc, getötet von Annotations.