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 SerializableSchnittstelle der Methode writeObject(Object)der ObjectOutputStreamtut , wie etwas instanceOf Serializablezu erkennen , ob die Klasse implementiert Serializableund führt NotSerializableExceptionentsprechend. 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
instanceOfOperator 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?
Serializableals Annotation ist Unsinn und@NonNullals Schnittstelle ist Unsinn. Ich würde sagen: Anmerkungen sind Marker + Metadaten. Übrigens: Forefunner of Annotations war XDoclet, geboren in Javadoc, getötet von Annotations.