J'ai eu une discussion avec un collègue aujourd'hui, si l'utilisation de l'utilisation de l'opérateur Java instanceof
est une sorte de réflexion. Et la discussion a rapidement évolué vers ce qui définit réellement la réflexion.
Alors, quelle est la définition de la réflexion?
Et l'utilisation de la instanceof
réflexion est-elle considérée comme "utilisant la réflexion"?
Et en plus, si l' instanceof
on considère la réflexion, le polymorphisme n'est-il pas également "utilisant la réflexion"? Sinon, quelle est la différence?
java
language-agnostic
language-features
reflection
Bjarke Freund-Hansen
la source
la source
instanceof
s'agit d'un exemple de réflexion. Certes, il se situe entre l'utilisation normale des données et l'utilisation des métadonnées viagetClass()
& friends, mais vous pouvez avoir des définitions viables.return
"programmation structurelle" est-elle considérée?Réponses:
Voici la définition de la réflexion selon wikipedia:
Je n'aurais pas pu mieux le dire moi-même et souligné la partie importante de votre question. Cela dit, oui, il
instanceof
est envisagé d'utiliser la réflexion. Le programme observe sa structure et effectue une introspection de type .la source
if (true)
regarde une valeur , pas un type . C'est pourquoi ce n'est pas considéré comme une réflexion.Par souci de clarté, je considérerais deux réponses.
Théoriquement ,
instanceof
c'est une forme de réflexion, comme expliqué dans la réponse de Falcon .Cependant, en pratique , lorsqu'un programmeur parle d'utiliser la réflexion, il se réfère généralement à bien plus que simplement vérifier si une variable est d'un certain type. C'est un concept tellement rudimentaire, sans lequel le polymorphisme ne serait pas possible .
Notez que l'utilisation
instanceof
indique souvent une odeur de code et qu'un polymorphisme approprié peut souvent être utilisé à la place.la source
Vous pourriez être intéressant dans l'article suivant: http://java.sun.com/developer/technicalArticles/ALT/Reflection/
La clé de cet article est un extrait de code où ils simulent le mot clé "instanceof" en utilisant la méthode "isInstance" de la classe "Class", qui fait partie de la fonction de réflexion de Java.
la source
Depuis les autres réponses, la définition dans Wikipedia a été modifiée (je suis d'accord avec ce changement, mais ce n'est pas moi qui l'ai fait) pour supprimer la partie entre parenthèses:
https://en.wikipedia.org/wiki/Type_introspection dit également spécifiquement
Je ne considérerais pas
instanceof
tomber sous la première définition: le programme examine une valeur, et non pas sa propre structure, et il ne comporte pas de valeurs représentant la structure du programme (en Java:java.lang.Class
,java.reflect.Method
, etc.); la marque de la réflexion est de travailler avec de telles valeurs.la source
OUI, l'opérateur "instanceof" est une forme de réflexion. Les réponses précédentes vous expliquent pourquoi.
«Réflexion» ou «introspection objet / classe» est un battage médiatique de nos jours, mais plusieurs langages de programmation ont utilisé une partie de ce concept, depuis un certain temps.
DOT NET (clone Java), (mis) utilise beaucoup.
la source