Javaでの反射のまとめ
2523 ワード
一、反射(Reflect)説明
JAVA反射メカニズムは,動作状態において,いずれのクラスに対しても,このクラスのすべての属性と方法を知ることができる.任意のオブジェクトについて、その任意のメソッドと属性を呼び出すことができます.これはClassオブジェクトによって行われます.このような動的に取得された情報と、動的にオブジェクトを呼び出すメソッドの機能はjava言語の反射メカニズムと呼ばれます.クラスを解剖するには、クラスのバイトコードファイルオブジェクトを取得する必要があります.解剖にはClassクラスの方法が使われている.まず、各バイトコードファイルに対応するClassタイプのオブジェクトを取得する.Classはクラス全体、FeFieldプロパティ、MeThodメソッド、Constructorメソッドを表します.
二、クラス
2.1 Classクラスの作成方法
2.2 Fields取得属性
2.3 Methodメソッド
2.4 Constructor構築方法
2.5親または親インタフェースの取得
JAVA反射メカニズムは,動作状態において,いずれのクラスに対しても,このクラスのすべての属性と方法を知ることができる.任意のオブジェクトについて、その任意のメソッドと属性を呼び出すことができます.これはClassオブジェクトによって行われます.このような動的に取得された情報と、動的にオブジェクトを呼び出すメソッドの機能はjava言語の反射メカニズムと呼ばれます.クラスを解剖するには、クラスのバイトコードファイルオブジェクトを取得する必要があります.解剖にはClassクラスの方法が使われている.まず、各バイトコードファイルに対応するClassタイプのオブジェクトを取得する.Classはクラス全体、FeFieldプロパティ、MeThodメソッド、Constructorメソッドを表します.
二、クラス
2.1 Classクラスの作成方法
//c , ,
Class c = Class.forNmae(String className);
// Class ,
Class c=ClassName.class;
// , .cgetClass()
User user=new User();
Class c=user.getClass();
// newInstance() Class
//
Object 0=c.newInstance();
2.2 Fields取得属性
// Public
Field [] fs=c.getFields();
//
Field [] fs=c.getDeclaredFiedls();
//
int i=fs.getModiFields();
String strModfire=Modifire.toString(i);// Int String
//
Class type=fis.getType();
String name=type.getName();
//
String name=fs[i].getName();
//
Field field=c.getDeclaredFiedls("name");
//
Object o=c.newInatance();
// , , ,
field.setAccessiable(true);
field.set(o," ");
//
field.get(o);
2.3 Methodメソッド
//
Method [] ms=c.getDeclaredMethods();
//
int i=ms[i].getModifires();
String modifireName=Modifire.toString(i)
//
Class returnType=ms[i].getReturnType();
String name=returnType.getSimpleName();
//
String name=ms.getName();
//
Class[] parmeters=ms.getParmeterTypes();
//
// + , methodName , ,
Method m=c.getDeclaredMethod("methodName",String.class,String.class);
Object o=c.newInstance();
Object retValue=m.invoke(0," "," ")
2.4 Constructor構築方法
//
Constructor[] cs=c.getDeclaredConstructor();
//
int i=cs[i].getModifires();
String modifireName=Modifire.toString(i)
//
String name=cs[i].getName();
//
Class[] parmterTypes=cs[i].getParamterTypes();
parmterTypes.getName();
// , ,
Constructor con=c.getDeclaredConstructor(String.class,int.class);
//
Object o=con.newInstance("XX",10);
2.5親または親インタフェースの取得
//
Class superClass=c.getSuperclass();
superClass.getName();
//
Class[] ins=c.getInterfaces();
ins[i].getName();