2

型情報とリフレクションに関する「ThinkinginJava」の章を読み終えたところです。私には非常に自然にinstanceof思えますが、反省のいくつかの例は私を混乱させました。リフレクションがJavaプロジェクトで広く使用されているかどうか知りたいですか?リフレクションの「良い部分」とは何ですか?より良い、価値のある例を使って、振り返りとタイプ情報についての興味深い講義を提案できますか?

編集(もう1つの質問):

プライベートメソッドとフィールドにアクセスするのが便利なのはなぜjava.lang.reflect.Method.setAccesible()ですか?

前もって感謝します。

4

4 に答える 4

3

いくつかの例を投稿していただければ、喜んで説明させていただきます。リフレクションは、実行中のオブジェクトに関するメタ情報を抽出する必要のあるフレームワークで広く使用されています(たとえば、アノテーションやオブジェクトのフィールドに依存するフレームワーク、Hibernate、Springなどについて考えてください)。上位層では、リフレクションを使用して一般的な機能を提供することがあります(たとえば、オブジェクト内のすべての文字列をエンコードしたり、ダックタイピングをエミュレートしたりするなど)。リフレクションの基本をカバーする本をすでに読んでいることは知っていますが、Sun(erm .. Oracle)の公式チュートリアルを必読として指摘する必要があります:http://download.oracle.com/javase/tutorial/reflect/

于 2011-05-01T15:12:16.023 に答える
2

私の意見の良い例の1つは、実行時にのみ認識されるクラス名に基づいてオブジェクトをインスタンス化することです。たとえば、構成ファイルに含まれています。動的にインスタンス化するクラスへの共通のインターフェースを知る必要があるので、それらをキャストするための何かもあります。ただし、これにより、どの実装が使用されるかを構成ドライブできます。

于 2011-05-01T15:10:11.987 に答える
0

別の例として、オブジェクトを子孫であるクラスにキャストする必要がある場合があります。そのオブジェクトのタイプがわからない場合は、instanceofを使用して、クラスキャストの例外を回避し、実行時にキャストが正しくなるようにすることができます。

例:

public void actionPerformed (ActionEvent e){
    Object obj = e.getSource();

    if (obj instanceof objType)
    objType t = (objType) obj;   // you can check the type using instanceof if you are not sure about obj class at runtime
}
于 2011-05-01T15:21:08.207 に答える
-1

Reflectionでこのような機能を提供する理由は、ツール/アプリケーションがクラス、変数、メソッドのメタ情報を必要とする複数の状況によるものです。例えば:-

  1. オートコンプリート機能を使用してメソッド名と属性名を取得するIDE。
  2. Web.xmlファイルとリクエストURIを解析して、正しいモジュールにリクエストを転送するためのTomcatWebコンテナ。
  3. JUnitはリフレクションを使用して、クラス内のすべてのメソッドを列挙します。testXXXという名前のメソッドをテストメソッドとして、または@Testによって注釈が付けられたメソッドとして想定します。

リフレクションに関する記事全体を読むには、http://modernpathshala.com/Forum/Thread/Interview/308/give-some-examples-where-reflection-is-usedを確認してください。

于 2016-01-05T18:17:56.807 に答える