web-dev-qa-db-ja.com

Java instanceof演算子はリフレクションと見なされますか、そして何がリフレクションを定義しますか?

Java演算子instanceofの使用が一種のリフレクションであるかどうかについて、今日、同僚とディスカッションを行いました。そしてディスカッションは、実際にリフレクションを定義するものに急速に発展しました。

つまり、反射の定義は何ですか?

_instanceofの使用は「リフレクションの使用」と見なされますか?

さらに、instanceofがリフレクションと見なされる場合、ポリモーフィズムも「リフレクションの使用」ではないのですか?そうでない場合、違いは何ですか?

24

これ は、Wikipediaによるリフレクションの定義です。

コンピュータサイエンスでは、リフレクションとは、コンピュータプログラムが観察(タイプイントロスペクションを実行)して、実行時に独自の構造と動作を変更できるプロセスです。

私はそれを自分でより良く言うことはできなかったし、あなたの質問の重要な部分を強調しました。そうは言っても、はい、instanceofはリフレクションを使用して考慮されます。プログラムはその構造を観察し、実行しますtype introspection

22
Falcon

明確にするために、2つの答えを考えます。

理論的にはinstanceofファルコンの答え で説明されているように、リフレクションの形式です。

コンピュータサイエンスでは、リフレクションは、コンピュータプログラムが実行時に自身の構造と動作を観察(イントロスペクションを実行)して変更できるプロセスです。

ただし、実際には、プログラマーがリフレクションの使用について話すとき、彼は通常、変数が特定の型であるかどうかをチェックするだけではありません。これはそのような基本的な概念であり、これがないと ポリモーフィズムは不可能です になります。

instanceofを使用すると、コードの匂いを示すことが多く、適切なポリモーフィズムを代わりに使用できることに注意してください。

13
Steven Jeuris

他の回答から、ウィキペディアの定義が変更され(私はたまたまこの変更に同意しますが、それを行ったのは私ではありません)、括弧内の部分を削除します。

コンピュータサイエンスでは、リフレクションとは、コンピュータプログラムが実行時に自身の構造と動作を調べ、内省し、変更する能力です。

https://en.wikipedia.org/wiki/Type_introspection も具体的に述べています

イントロスペクションとリフレクションを混同しないでください

私はinstanceofが最初の定義に該当するとは考えません。プログラムは独自の構造ではなく値を調べ、プログラムの構造を表す値を含みません(JavaではJava.lang.ClassJava.reflect.Methodなど)。リフレクションの特徴は、そのような値を処理することです。

2
Alexey Romanov

次の記事に興味があるかもしれません: http://Java.Sun.com/developer/technicalArticles/ALT/Reflection/

この記事で重要なのは、Javaのリフレクション機能の一部である「クラス」クラスの「isInstance」メソッドを使用して「instanceof」キーワードをシミュレートするコードスニペットです。

2
Jalayn