反射法動的動作_ _ _ビルダー特性を得ます

関連するコードの例の属性を取得します:

ReflectProjectをパッケージ化。

java.lang.reflect.Constructorインポート;
をjava.lang.reflect.Fieldなどのインポート、
インポートjava.lang.reflect.Methodオブジェクト;
/ **
*ゲットプロパティクラス、メソッド、コンストラクタ
* @author管理
*
* /
publicクラスにTest2 {
公共の静的な無効メイン(文字列[] args)、ClassNotFoundExceptionがスロー持たないNoSuchFieldExceptionは、SecurityException、ないNoSuchMethodException {
文字列のパス= "ReflectEntity.User";
.. 1 //クラス名取得
クラスCはClass.forNameの(パス)=と、
のSystem.out .println( "完全なクラス名:" + c.getName());
( "クラス名:" + c.getSimpleName())System.out.printlnは;


//取得した親クラスのオブジェクト
クラスcsuper = C .getSuperclass();
System.out.printlnは( "完全なクラス名:" + csuper.getName());
System.out.println( "クラス名:" + csuper.getSimpleName());


//属性取得クラス2
// c.getFieldフィールド、F =( "ID"); //エラーは、のみ開示され得ることができます属性
//のSystem.out.println(F)
フィールド、[] = c.getFieldsフィールド();
のSystem.out.println(fields.length); // 0、依然としてに開示されたプロパティ取得することができる

フィールドを、[] = c.getDeclaredFields fields2();
のSystem.out.println(fields2.length); // 3である。
(フィールド、フィールド:fields2)用{
のSystem.out.println(フィールド); //コールtoStringメソッド
のSystem.out。 println(field.getModifiers()+ "\ T" + field.getType()+ "\ T" + field.getName()); // 2 私有地に代わっ
}

// 3クラス情報を取得する方法
方法、[] = c.getDeclaredMethods方法();
のSystem.out.println(methods.length);
(方法、方法:方法)のために{
//のSystem.out.println(方法)。
System.out.println( "アクセス:" + method.getModifiers()+ " \トン戻り値の型:" + method.getReturnType()+ " \トンメソッド名:" + method.getName());
//パラメータ取得方法
クラス[] = Cpara Method.getParameterTypes();
のため(クラスC1:Cpara){
するSystem.out.println( "パラメータ・タイプの方法:" + c1.getTypeName());
}
のSystem.out.println ( "----------------------------");
}

//は4クラスのコンストラクタ(コンストラクタ)を取得します。
コンストラクタ[] = c.getConstructorsコンストラクタ();
(コンストラクタコンストラクタ:コンストラクタ)は{
;のSystem.out.println(コンストラクタ)
}
//指定されたコンストラクタを取得
コンストラクタc.getConstructor = CON(NULL);
のSystem.out.println(CON );
コンストラクタCON2 = c.getConstructor(int.classを、String.class、String.class);
システム。out.printlnを(CON2)。


}

}

 

 

 

ダイナミックな操作属性、メソッド、建設相関コード例:

ReflectProjectをパッケージ化。

輸入java.lang.reflect.Constructor;
インポートをjava.lang.reflect.Field;
インポートにjava.lang.reflect.InvocationTargetException;
輸入java.lang.reflect.Methodオブジェクト;

輸入ReflectEntity.User;

/**
* 动态的操作属性、方法、构造方法
* @author Administrator
*
*/
public class Test3 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
//得到class对象
Class c = Class.forName("ReflectEntity.User");
//得到无参构造方法
Constructor cons = c.getConstructor(null);
//通过无参构造方法的对象,创建User类的对象
User user = (User) cons.newInstance();
//动态操作属性
Field field = c.getDeclaredField("ID");
field.setAccessible(true);//这个属性不需要安全检查了,可以直接访问
//通过反射直接赋值
field.set(user, 1001);
System.out.println("取出ID这个属性的值:"+field.get(user));

//动态操作方法
Method m = c.getDeclaredMethod("setUserName", String.class);
//执行这个方法
m.invoke(user, "张三");
Method m2 = c.getDeclaredMethod("getUserName", null);
System.out.println(m2.invoke(user));
}
}

おすすめ

転載: www.cnblogs.com/LuJunlong/p/12155844.html