リフレクション②:コンストラクタメソッド、共通のメソッドとメンバ変数を呼び出します

 最初のクラス(例えば、学生)を得ます

クラスclazz =学生。クラス

①構成を得る方法:いくつかのクラスのクラスの手段によって得ることができるコンストラクタ対応するクラスのインスタンスオブジェクトが宣言

// テストテスト
//は、このオブジェクトがパブリックコンストラクタ(継承されない)オブジェクトのコンストラクタに対応するクラスのパラメータリストと一致表す返し コンストラクタclazz.getConstructor =コンストラクタ(); // 公衆// 戻りクラスオブジェクトは、位相引数リストを表します対応するコンストラクタ(アクセスとの間の区別なし)コンストラクタオブジェクト一致 コンストラクタclazz.getDeclaredConstructor =コンストラクタ()を; //はアクセスを区別しない// このオブジェクトがコンストラクタを含むクラスに対応するすべてのpublicコンストラクタ(継承されない)を表し戻りますオブジェクトの配列 コンストラクタ[] = clazz.getConstructorsコンストラクタ(); // 公衆//はクラスオブジェクトが宣言されたすべてのコンストラクタ(アクセスとの間の区別なし)に対応するコンストラクタオブジェクト表す返す コンストラクタclazz.getDeclaredConstructorsを=(); // ありません区別するためのアクセス


②運用コンストラクタ - コンストラクタ情報を取得します

// のコンストラクタメソッドを取得
コンストラクタコンストラクタ = clazz.getConstructorを();

// オブジェクトのコンストラクタクラスのクラスに対応するreturn文Constructorオブジェクト 
clazz = Constructor.getDeclaringClass();

// モディファイConstructorオブジェクトは、整数コンストラクタ示さ返す
INT MOD = constructor.getModifiers()を。
結果のString = Modifier.toString(MOD); // 結果である出力結果


// 名前コンストラクタ、オブジェクトコンストラクタ戻り列は示さ 
列RES = constructor.getNameは();

// 戻り値は、コンストラクタのオブジェクトはクラスのアレイの種類に対応するパラメータによって表されるコンストラクタオブジェクトコンストラクタはパラメータ、配列の長さを有していない場合は、0 
クラス[]タイプConstructor.getParameterTypes =();

 ③のコンストラクタ - オブジェクトを作成します。

コンストラクタコンストラクタ= clazz.getConstructor()。

//は真を無視アクセス権限の影響を無視するかどうかのコンストラクタを呼び出し、falseが無視しない 
(constructor.setAccessibleをtrueに)。

// 新しいオブジェクトを作成するために使用Constructorオブジェクトコンストラクタは、ブラケット着信コンストラクタパラメータで、コンストラクタクラス宣言で表される、そうでない場合はnull、または0アレイの長さに設定することができるされている 
オブジェクトのオブジェクト=コンストラクタ.newInstance()。

④一般的な方法を得る:いくつかが宣言されたクラスのインスタンスオブジェクトに対応する従来の方法Classクラスによって得ることができます

// 単一
 //は、メソッドオブジェクトパブリッククラスまたはクラスオブジェクトの型パラメータと一致するメソッドのインタフェース方法返し 
手法法clazz.getMethod =(「methodNameの」タイプ); // 公衆は、親クラスから継承します

//は、クラスまたはインタフェースのメソッド名とクラスオブジェクトメソッド(継承されない)がMethodオブジェクトを対応するタイプのパラメータに一致する方法を返します。
= clazz.getDeclaredMethod方法、( "doHomework"、文字列。クラス); // アクセスを無視

// すべて
 // 返すメソッドオブジェクトの配列に対応するクラスオブジェクトは、すべてのパブリックメソッドのクラスまたはインタフェース(継承を含みます)。
方法[]メソッドclazz.getMethods =(); // 親クラスから継承を含むすべてのパブリック
 //は、このクラスオブジェクトのメソッドを返しクラスまたはインタフェースの定義内に宣言されたすべてのアクセス(継承されない)方法を対応を表しますオブジェクトの配列。
= clazz.getDeclaredMethodsメソッド(); //は、すべてのアクセスを無視します

⑤操作の一般的な方法 - 情報を取得する一般的な方法

// メソッドを取得 
する方法、メソッドclazz.getDeclaredMethod =(「名前」、タイプ)。

// クラスのオブジェクトは、オブジェクト・クラスのメソッド文表現を返すまたはインタフェース
)(method.getDeclaringClassします。

// メソッド修飾子メソッド整数を返しますオブジェクトを表します。
INT MOD = method.getModifiers()。
文字列結果 = Modifier.toString(MOD)。
            
// 戻り値は、クラスのオブジェクトの種類に応じた方法で表されるメソッドのオブジェクトを返し 
clazz = Method.getReturnType()。
    
// 名前を返します。
method.getName(); /

// メソッドオブジェクトは、アレイ方式表すクラスオブジェクトタイプによって対応するパラメータを返す 
Method.getParameterTypesを();

⑥操作する一般的な方法 - 通常のメソッド呼び出し

// メソッドを取得 
する方法、メソッドclazz.getDeclaredMethod =(「名前」、タイプ)。

// 省略する真のアクセスメソッド呼び出しの影響を無視するかどうかを、偽の表現は無視できません。
(method.setAccessible trueに)。

// メソッドを呼び出すメソッドオブジェクトを参照し、Object型の結果を返します。OBJをヌルとして指定することができる静的メソッド場合objがクラスを表す場合には、引数メソッドにパラメータがない場合は、方法の着信を表すパラメータ、args配列の長さは、0またはヌルであってもよいです。
Method.invoke OBJ =オブジェクト(オブジェクト、オブジェクト); // 反射法は静的非静的区別しない場合

⑦メンバ変数を取得:クラスがで宣言されたクラスのメンバ変数に対応するオブジェクトのいくつかの助けクラスのインスタンスを取得することができます

 

// 単一
 // 戻りクラスオブジェクトは、クラスフィールドが同じパブリックプロパティに対応する(継承を含む)指定された属性名とオブジェクトまたはインターフェイスを表します。
= Clazz.getFieldフィールドフィールド、(文字列フィールド名); // 公衆

//はすべての属性を表すクラスオブジェクトクラス(継承されない)を返すか、またはフィールドの対応する配列は、インターフェイスで定義されたオブジェクト。
= clazz.getDeclaredFieldフィールド、(文字列フィールド名); // すべて

//は(継承を含む)すべての公共のクラスまたはインタフェースの特性に対応するオブジェクトのフィールドの配列を表すクラスオブジェクトを返します。
フィールド、[] =フィールドclazz.getFields()。

//はすべての属性を表すクラスオブジェクトクラス(継承されない)を返すか、またはフィールドの対応する配列は、インターフェイスで定義されたオブジェクト。
 フィールド= clazz.getDeclaredFields()。

⑧メンバ変数を操作する - メンバ変数の情報を取得します。

フィールド=フィールドclazz.getField(文字列フィールド名);
 // クラスまたはインタフェース相当にreturnステートメントフィールド対象オブジェクトクラスフィールド。
= clazz field.getDeclaringClass()。

//は、フィールドFieldオブジェクトの名前を返します。
= clazz field.getName()。

//は、図2に対応するデータのFieldオブジェクトクラスのオブジェクト・タイプ・フィールドを返します。
= clazz Field.getType()。

// 修飾子フィールドは、オブジェクトフィールドの整数表現を返し
INT MOD = field.getModifiersを();
文字列結果 = Field.toString(MOD)。

⑨操作する変数 - 買収の値とメンバ変数を設定します

 

フィールドフィールド= clazz.getField(文字列フィールド名)。

// 設定または省略して、真のプロパティ値を取得するときのアクセスの影響を無視するかどうかを、偽の表現は無視できません。
(field.setAccessible trueに)。


// フィールドタイプオブジェクトフィールドを示す値を返します。プロパティが静的である場合、OBJクラスが作成されたオブジェクトのプロパティのために、あなたはnullに設定することができます。
Field.get(オブジェクトobj); //は、値を取得します

//は、プロパティは、Fieldオブジェクトの新しい値を設定することを示しています。クラスが作成されたオブジェクトのプロパティのためのOBJ、プロパティは静的クラスがnullに設定されている場合は、新しいプロパティ値の値。
field.set(オブジェクトobj、Object値); // 設定値

 

 

 

おすすめ

転載: www.cnblogs.com/yimengxianzhi/p/12163182.html