Java反射メカニズム
Java反射メカニズムは、任意のクラスのすべてのクラスを知ることができますこの方法は、Java言語の反射メカニズムと呼ばれます。
Java反射メカニズムは、主に次の機能を提供しますオブジェクト。
1.オブジェクトのプロパティを取得します
コードコピーは次のとおりです。
public object getProperty(オブジェクト所有者、文字列フィールド名)スロー例外{
class ownerclass = owner.getClass();
フィールドフィールド= OwnerClass.getField(FieldName);
objectプロパティ= field.get(所有者);
プロパティを返す;
}
class ownerclass = owner.getClass():このオブジェクトのクラスを取得します。
フィールドフィールド= OwnerClass.getField(FieldName):クラスを通じてクラスで宣言された属性を取得します。
Object Property = field.get(所有者):このプロパティを介してこのプロパティのインスタンスを取得します。
2。特定のクラスの静的特性を取得します
コードコピーは次のとおりです。
パブリックオブジェクトgetstaticProperty(string classname、string fieldname)
例外をスローする{
class ownerclass = class.forname(className);
フィールドフィールド= OwnerClass.getField(FieldName);
objectプロパティ= field.get(ownerclass);
プロパティを返す;
}
class ownerclass = class.forname(classname):最初にこのクラスのクラスを取得します。
フィールドフィールド= OwnerClass.getField(FieldName):上記のように、クラスを通じてクラスで宣言された属性を取得します。
Object Property = field.get(OwnerClass):これは上記とは少し異なります。プロパティは静的であるため、クラスのクラスから直接取得されるためです。
3。オブジェクトを実行する方法
コードコピーは次のとおりです。
パブリックオブジェクトInvokeMethod(オブジェクト所有者、String MethodName、object args)スロー例外{
class ownerclass = owner.getClass();
class [] argsclass = new class [args.length];
for(int i = 0、j = args.length; i <j; i ++){
argsclass [i] = args [i] .getclass();
}
メソッドメソッド= ownerclass.getMethod(methodname、argsclass);
return method.invoke(所有者、args);
}
class owner_class = owner.getClass():まず、このオブジェクトのクラスを取得する必要があります。
5〜9行目:メソッドを見つける条件として、パラメーターのクラス配列を構成します。
メソッドメソッド= ownerclass.getMethod(MethodName、ArgsClass):MethodNameおよびArgsClass(メソッドに設定されたパラメータータイプ設定)アレイによってメソッドを実行するメソッドを取得します。
Method.Invoke(所有者、ARGS):メソッドを実行するパラメーター。インボークメソッドは、このメソッドを実行するオブジェクト所有者であり、パラメーター配列は次のように理解できます。 。返品値はオブジェクトであり、これもメソッドの返品値です。
4。特定のクラスの静的方法を実行します
コードコピーは次のとおりです。
パブリックオブジェクトInvokestaticMethod(string classname、string methodname、
オブジェクト[] args)スロー例外{
class ownerclass = class.forname(className);
class [] argsclass = new class [args.length];
for(int i = 0、j = args.length; i <j; i ++){
argsclass [i] = args [i] .getclass();
}
メソッドメソッド= ownerclass.getMethod(methodname、argsclass);
return method.invoke(null、args);
}
基本原理は例3と同じです。違いは最後の行です。これは静的な方法であり、インスタンスの助けを必要としないためです。
5.新しいインスタンスを作成します
コードコピーは次のとおりです。
public object newinstance(string classname、object [] args)スロー例外{
class newoneclass = class.forname(classname);
class [] argsclass = new class [args.length];
for(int i = 0、j = args.length; i <j; i ++){
argsclass [i] = args [i] .getclass();
}
Constructor Cons = newoneClass.getConstructor(ArgsClass);
return cons.newinstance(args);
}
ここで説明した方法は、パラメーターを使用してコンストラクターを実行して新しいインスタンスを作成することです。パラメーターが必要ない場合は、newoneclass.newinstance()を使用してそれを実装できます。
class newoneclass = class.forname(classname):最初のステップは、インスタンスのクラスを構築することです。
5行目から9行目:パラメーターのクラス配列を取得します。
Constructor Cons = newoneClass.getConstructor(ArgsClass):get constructor。
Cons.NewInstance(args):新しいインスタンスを作成します。
6.特定のクラスのインスタンスであるかどうかを判断します
コードコピーは次のとおりです。
public boolean isinstance(Object obj、class cls){
cls.isinstance(obj)を返します。
}
7.配列に要素を取得します
コードコピーは次のとおりです。
Public Object getByarray(オブジェクトアレイ、intインデックス){
return array.get(array、index);
}