Java演算子instanceof
の使用が一種のリフレクションであるかどうかについて、今日、同僚とディスカッションを行いました。そしてディスカッションは、実際にリフレクションを定義するものに急速に発展しました。
つまり、反射の定義は何ですか?
_instanceof
の使用は「リフレクションの使用」と見なされますか?
さらに、instanceof
がリフレクションと見なされる場合、ポリモーフィズムも「リフレクションの使用」ではないのですか?そうでない場合、違いは何ですか?
これ は、Wikipediaによるリフレクションの定義です。
コンピュータサイエンスでは、リフレクションとは、コンピュータプログラムが観察(タイプイントロスペクションを実行)して、実行時に独自の構造と動作を変更できるプロセスです。
私はそれを自分でより良く言うことはできなかったし、あなたの質問の重要な部分を強調しました。そうは言っても、はい、instanceof
はリフレクションを使用して考慮されます。プログラムはその構造を観察し、実行しますtype introspection。
明確にするために、2つの答えを考えます。
理論的には、instanceof
は ファルコンの答え で説明されているように、リフレクションの形式です。
コンピュータサイエンスでは、リフレクションは、コンピュータプログラムが実行時に自身の構造と動作を観察(イントロスペクションを実行)して変更できるプロセスです。
ただし、実際には、プログラマーがリフレクションの使用について話すとき、彼は通常、変数が特定の型であるかどうかをチェックするだけではありません。これはそのような基本的な概念であり、これがないと ポリモーフィズムは不可能です になります。
instanceof
を使用すると、コードの匂いを示すことが多く、適切なポリモーフィズムを代わりに使用できることに注意してください。
他の回答から、ウィキペディアの定義が変更され(私はたまたまこの変更に同意しますが、それを行ったのは私ではありません)、括弧内の部分を削除します。
コンピュータサイエンスでは、リフレクションとは、コンピュータプログラムが実行時に自身の構造と動作を調べ、内省し、変更する能力です。
https://en.wikipedia.org/wiki/Type_introspection も具体的に述べています
イントロスペクションとリフレクションを混同しないでください
私はinstanceof
が最初の定義に該当するとは考えません。プログラムは独自の構造ではなく値を調べ、プログラムの構造を表す値を含みません(JavaではJava.lang.Class
、Java.reflect.Method
など)。リフレクションの特徴は、そのような値を処理することです。
次の記事に興味があるかもしれません: http://Java.Sun.com/developer/technicalArticles/ALT/Reflection/
この記事で重要なのは、Javaのリフレクション機能の一部である「クラス」クラスの「isInstance」メソッドを使用して「instanceof」キーワードをシミュレートするコードスニペットです。