[Marker-Schnittstelle](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%AB%E3%83%BC%E3%82%A4%E3% 83% B3% E3% 82% BF% E3% 83% 95% E3% 82% A7% E3% 83% BC% E3% 82% B9) ist eine Klasse, die keine Methodendefinition enthält und einfach die Schnittstelle implementiert. Ist zu zeigen, dass ein bestimmtes Attribut hat. Ein Beispiel ist die `` `Serializable``` -Schnittstelle (Kapitel 12). Die Implementierung dieser Schnittstelle zeigt, dass Instanzen dieser Klasse in "ObjectOutputStream" geschrieben werden können.
Mit dem Aufkommen von Markierungsanmerkungen (Punkt 39) mag die Markierungsschnittstelle veraltet erscheinen, aber es ist ein Fehler.
Die Markierungsschnittstelle bietet zwei Vorteile gegenüber Markierungsanmerkungen.
Das erste ist, dass ** die Marker-Schnittstelle den Typ definiert, aber nicht ** die Marker-Annotation. Auf diese Weise können Fehler zur Kompilierungszeit abgefangen werden, die erst zur Laufzeit von Markierungsanmerkungen erfasst werden können.
Die Serialisierungsfunktion von Java verwendet die Markierungsschnittstelle "Serializable", um anzuzeigen, dass der Typ serialisierbar ist. Die Methode `ObjectOutputStream.writeObject``` serialisiert das übergebene Objekt, erfordert jedoch, dass seine Argumente serialisierbar sind. Wenn das Argument dieser Methode "Serializable" ist (tatsächlich wird ein Objekt benötigt), kann es durch Kompilierung erkannt werden, wenn ein Argument eines unangemessenen Typs auftritt. Das zweite ist, dass die ** Marker-Oberfläche prägnanter und zielgerichteter ** ist. Wenn das Ziel der Markierungsanmerkung "ElementType.TYPE" ist, werden alle Klassen und Schnittstellen als Ziel ausgewählt. Bei der Markierungsschnittstelle ist sie jedoch auf die Klasse beschränkt, die sie implementiert. ```set```Die Schnittstelle ist eine solche Grenzmarkierungsschnittstelle. Set ist nur in Collection-Subtypen implementiert, fügt jedoch den in Collection definierten Methoden nichts hinzu. Set definiert einige der Methoden der Sammlung neu, sodass es im Allgemeinen nicht als Markierungsschnittstelle betrachtet wird. Es ist jedoch leicht vorstellbar, dass eine Markierungsschnittstelle nur für einen bestimmten Schnittstellensubtyp gilt und die Methoden der Schnittstelle nicht neu definiert. Eine solche Markierungsschnittstelle beschreibt einen unveränderlichen Wert (?) Für das gesamte Objekt oder gibt an, dass seine Instanz für die Verarbeitung durch eine Methode einer anderen bestimmten Klasse (in diesem Sinne `) angepasst ist. Die
Serializable -Schnittstelle zeigt an, dass die Instanz für die Verarbeitung durch `` `ObjectOutputStream
) geeignet ist.
** Der Vorteil von Markierungsanmerkungen besteht darin, dass sie Teil einer größeren Anmerkungsfunktion sind. ** Daher werden Markierungsanmerkungen in einem auf Anmerkungen basierenden Framework aus Gründen der Konsistenz berücksichtigt.
Erstens besteht die einzige Möglichkeit, anderen Elementen als Klassen und Schnittstellen Markierungen hinzuzufügen, darin, Markierungsanmerkungen zu verwenden. In Bezug auf Marker für Klassen und Schnittstellen *** Haben Sie jemals eine oder mehrere Methoden geschrieben, die nur auf Objekte mit dieser Markierung abzielen? *** *** Erwägen. Wenn Sie etwas zu schreiben haben, sollten Sie die Markierungsschnittstelle verwenden. Dies ermöglicht die Typprüfung von Methodenargumenten zur Kompilierungszeit. Wenn Sie es nicht schreiben, sollten Sie Markierungsanmerkungen verwenden. Markierungsanmerkungen sollten für die Markierung in Frameworks ausgewählt werden, die viele Anmerkungen verwenden.
Recommended Posts