Der Inhalt dieses Artikels befasst sich mit der Frage: Was ist die Java Marker-Schnittstelle? Die Einführung der Java-Tag-Schnittstelle hat einen gewissen Referenzwert. Ich hoffe, dass sie für Sie hilfreich ist.
Sehen wir uns zunächst an, was eine Marker-Schnittstelle ist. Die Tag-Schnittstelle wird manchmal als Tag-Schnittstelle bezeichnet, das heißt, die Schnittstelle enthält keine Methoden. Es ist einfach, Beispiele für markierte Schnittstellen in Java zu finden. Beispielsweise ist die serialisierbare Schnittstelle im JDK eine markierte Schnittstelle.
Lassen Sie uns zunächst klarstellen, dass die Marker-Schnittstelle keineswegs nur für die Programmiersprache Java gilt, sondern eine universelle Schnittstelle für Computer Wissenschaft. Designkonzept.
Sehen wir uns die Definition der Marker-Schnittstelle in Wikipedia an.
„Das Tag/Marker-Schnittstellenmuster ist ein Entwurfsmuster in der Informatik, das mit Sprachen verwendet wird, die Laufzeittypinformationen über Objekte bereitstellen. Es bietet eine Möglichkeit, Metadaten einer Klasse zuzuordnen, wo die Sprache dies tut.“ Ich habe keine explizite Unterstützung für solche Metadaten.
Tagged Interface ist eine Designidee in der Informatik. Die Programmiersprache selbst unterstützt die Pflege von Metadaten für Klassen nicht. Die Markierungsschnittstelle gleicht diesen Mangel an Funktionalität aus – eine Klasse implementiert eine Markierungsschnittstelle ohne jegliche Methoden. Tatsächlich wird die Markierungsschnittstelle gewissermaßen zu einem der Metadaten dieser Klasse. Zur Laufzeit können wir diese Metadaten über den Reflexionsmechanismus der Programmiersprache im Code abrufen.
Nehmen Sie als Beispiel die Serializable-Schnittstelle. Eine Klasse implementiert diese Schnittstelle und gibt an, dass sie serialisiert werden kann. Daher verwenden wir tatsächlich die Serializable-Schnittstelle, um die Klasse mit „serialisierbaren“ Metadaten zu markieren und sie als „serialisierbar“ zu kennzeichnen. Daher kommt auch der Name der Tag/Label-Schnittstelle.
Der folgende Code stammt aus dem JDK-Quellcode:
if (obj instanceof String) { writeString((String) obj, unshared); } else if (cl.isArray()) { writeArray(obj, desc, unshared); } else if (obj instanceof Enum) { writeEnum((Enum) obj, desc, unshared); } else if (obj instanceof Serializable) { writeOrdinaryObject(obj, desc, unshared); } else { if (extendedDebugInfo) { throw new NotSerializableException(cl.getName() + " " + debugInfoStack.toString()); } else { throw new NotSerializableException(cl.getName()); } }
Serialisierung in Java, Zeichenfolgen, Arrays, Aufzählungsklassen und gewöhnliche Klassen werden separat durchgeführt. Wenn die aktuell zu serialisierende Variable weder ein String noch ein Array oder eine Aufzählungsklasse ist, wird geprüft, ob die Klasse die Serializable-Schnittstelle implementiert. Bitte beachten Sie, dass Zeile 1177 der folgenden Abbildung diese Erkennung durchführt. Wenn die Serializable-Schnittstelle nicht implementiert ist, wird eine Ausnahme NotSerializableException ausgelöst.
Sie fragen sich vielleicht: Sind die in Spring überall herumfliegenden Anmerkungen nicht die beste Möglichkeit, Metadaten zu pflegen? Tatsächlich kann Annotation vor Java-Paketen, Klassen, Feldern, Methoden, lokalen Variablen, Methodenparametern usw. deklariert werden, um Metadaten zu verwalten, was sowohl flexibel als auch praktisch ist. Eine so gute Sache kann jedoch erst nach JDK1.5 verwendet werden. Vor JDK1.5 oblag die wichtige Aufgabe der Metadatenpflege der Markenschnittstelle.
Werfen wir einen Blick auf eine andere Marker-Schnittstelle, Cloneable. Zeile 51 der folgenden Abbildung zeigt deutlich, dass diese Schnittstelle seit JDK1.0 verfügbar ist.
Die Kommentare der Clone-Methode im JDK-Quellcode sind ebenfalls deutlich gekennzeichnet. Wenn eine Klasse die Cloneable-Schnittstelle nicht implementiert, ist dies der Fall wird ausgeführt, wenn die Klonmethode ausgeführt wird. Löst eine CloneNotSupportedException aus.
Das obige ist der detaillierte Inhalt vonWas ist die Java-Marker-Schnittstelle? Einführung in die Java-Markup-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!