応用例の概要反射リフレクタ_

反射(反射)がキー動的言語とみなされ、
リフレクションAPIによる反射は、取得した内部情報の任意のタイプの実行中にプログラム可能
と内部プロパティと任意のオブジェクトの操作方法は、直接であってもよいです

パッケージcom.aff.reflection;
 インポートをjava.lang.reflect.Fieldとして、
 インポートjava.lang.reflect.Methodオブジェクト、
 インポートorg.junit.Test; 

/ * 
      リフレクション(反射)は、キー動的言語とみなされる
      反射可任意のタイプの内部情報を取得するためにリフレクションAPIによるプログラムの実行、
      直接任意のオブジェクトの内部属性およびメソッド操作でき
      
設けJavaリフレクション機構の機能を:
              ①いずれかのオブジェクトの決意は、実行時にクラスに属し
              、実行時に任意の構成②クラスオブジェクト
              の任意のランタイムクラスのメンバ変数とメソッドを分析している③ 
              任意のオブジェクトのメンバ変数とメソッドは、実行時に呼び出さ④ 
              動的プロキシを生成⑤は
:主にAPI関連反射
              ①のjava.lang.Class:代表をクラス
              ②java.lang.reflect.Method:メソッドは、クラス表す
              クラスを表すフィールド:③java.lang.reflect.Fieldを
              ④java.lang.reflect.Constructor:代表クラスのコンストラクタ
 * / 
パブリック クラスTestReflection { 

    // 反射と、反射によって、オブジェクトクラスを作成すること、および構成呼び出し
    @Test
     公共 ボイド TEST2()はスロー例外{ 
        クラスの <人が> = clazz人数。クラス;
         // 1。クラス人物に対応するランタイムクラス作成clazz 
        人P = clazz.newInstanceを(); 
        のSystem.out.println(P); // 人[NAME =ヌル、年齢= 0] 

        // 2ランは反射によって呼び出さ指定された属性クラス
         //は属性の2.1public 
        フィールド、F1 = clazz.getField( "名前" );
        f1.set(P、 "白" );
        のSystem.out.println(P); // 人[NAME =白、年齢= 0] 

        // getDeclaredField、真のsetAccessible()を使用して2.2private特性 
        フィールド、F2 = clazz.getDeclaredFieldを( "年齢" ); 
        f2.setAccessible(真の); 
        f2.set(P、 33である); 
        のSystem.out.println(P); // 人[NAME =白、年齢= 33である] 

        // 反射走行によって呼び出さ3この方法は、場合クラスの指定 
        方法、M1 = clazz.getMethod(「表示」); 
        m1.invoke(P); //は即ち、利得が歌っオフ失われ、パラメータを使用してそれを除去することなく、追跡することができる 
        」(M2 = clazz.getMethod方法。ファイル名を指定して実行表示」、文字列クラス); //クラス<?> ... parameterTypesと、  
//クラスはのタイプ書くべき
m2.invoke(P、「羅陰には」); // 心配も長いを憎む\ nは羅殷 } // 前に反射機構では、どのようにオブジェクト・クラスを作成し、メソッド呼び出し、プロパティ @Test 公共 ボイドTEST1(){ 人P = 新しい新規人物(); p.setAge( 35 ); p.setName( "羅陰" のSystem.out。 println(P); p.show(); p.display( "後唐" ); } }

 

おすすめ

転載: www.cnblogs.com/afangfang/p/12622334.html