Ich hatte heute eine Diskussion mit einem Kollegen, ob die Verwendung des Java-Operators instanceof
eine Art Reflexion ist. Und die Diskussion entwickelte sich schnell zu dem, was Reflexion eigentlich definiert.
Was ist also die Definition von Reflexion?
Und wird die Verwendung von instanceof
"Reflexion verwenden" in Betracht gezogen?
Und wenn instanceof
man darüber hinaus von Reflexion spricht, heißt Polymorphismus dann nicht auch "Reflexion verwenden"? Wenn nicht, was ist der Unterschied?
java
language-agnostic
language-features
reflection
Bjarke Freund-Hansen
quelle
quelle
instanceof
es sich um ein Beispiel für Reflexion handelt. Sicherlich liegt es irgendwo zwischen der normalen Datennutzung und der Metadatennutzung übergetClass()
& friends, aber Sie können auf andere Weise brauchbare Definitionen haben.return
"struktureller Programmierung" in Betracht gezogen?Antworten:
Dies ist die Definition von Reflektion nach Wikipedia:
Ich hätte es selbst nicht besser sagen können und den wichtigen Teil für Ihre Frage hervorgehoben. Das heißt, ja,
instanceof
wird mit Reflektion betrachtet. Das Programm beobachtet seine Struktur und führt eine Selbstbeobachtung durch .quelle
if (true)
sich um einen Wert handelt , nicht um einen Typ . Deshalb wird es nicht als Reflexion betrachtet.Aus Gründen der Klarheit würde ich zwei Antworten in Betracht ziehen.
Theoretisch ,
instanceof
ist eine Form der Reflexion, wie in erläutert Falcon Antwort .In der Praxis bezieht sich ein Programmierer jedoch, wenn er über die Verwendung von Reflexion spricht, in der Regel auf viel mehr, als nur zu prüfen, ob eine Variable von einem bestimmten Typ ist. Dies ist ein so rudimentäres Konzept, ohne das Polymorphismus nicht möglich wäre .
Beachten Sie, dass die Verwendung von
instanceof
häufig auf einen Codegeruch hinweist und stattdessen häufig der richtige Polymorphismus verwendet werden kann.quelle
Der folgende Artikel könnte Sie interessieren: http://java.sun.com/developer/technicalArticles/ALT/Reflection/
Der Schlüssel in diesem Artikel ist ein Codeausschnitt, in dem das Schlüsselwort "instanceof" mithilfe der Methode "isInstance" der Klasse "Class" simuliert wird, die Teil der Reflection-Funktion von Java ist.
quelle
Seit den anderen Antworten wurde die Definition in Wikipedia geändert (ich stimme dieser Änderung zufällig zu, war aber nicht derjenige, der sie vorgenommen hat), um den Teil in Klammern zu entfernen:
https://en.wikipedia.org/wiki/Type_introspection sagt auch speziell
Ich würde nicht die Ansicht ,
instanceof
unter der ersten Definition fallen: das Programm einen Wert untersucht, nicht seine eigene Struktur, und es beinhaltet keine Werte Programmstruktur darstellt (in Java:java.lang.Class
,java.reflect.Method
, etc.); das Markenzeichen der Reflexion arbeitet mit solchen Werten.quelle
JA, "instanceof" -Operator ist eine Form der Reflexion. In den vorherigen Antworten erfahren Sie, warum.
"Reflection" oder "object / class introspection" ist heutzutage ein Hype, aber einige Programmiersprachen verwenden seit einiger Zeit dieses Konzept.
DOT NET (Java-Klon), (mis) verwendet viel.
quelle