反射によるフィールドの取得と使用(Filed)
3638 ワード
この記事では、2つのセクションに分けます:1、反射取得フィールドで反射取得フィールドを使用する:1.フィールドが存在するクラスのバイトコード2を見つけます.取得フィールド
public Field[] getFields(): Class public
, .
public Field getField(StringfieldName): Class fieldName public
, .
public Field[] getDeclaredFields(): Class , .
public Field[] getDeclaredField(Stringname): Class fieldName , .
は一例によって印象を深め、コードは簡単に直接コードを貼り付ける:
class OO{
public int oo;
}
class PP extends OO{ public String name;
public int age;
private int sex;
}
public class FiledDemo { public static void main(String[] args) throws Exception {
Class clazz = PP.class;
Field[] fs = clazz.getFields();// public Filed
for (Field field : fs) {
System.out.println(field);
}
System.out.println("---------------------------");
fs = clazz.getDeclaredFields();// Filed
for (Field field : fs) {
System.out.println(field);
}
System.out.println("---------------------------");
Field f = clazz.getField("name");// public Filed
System.out.println(f);
System.out.println("---------------------------");
f = clazz.getDeclaredField("sex");// Filed( private default public)
System.out.println(f);
}
}2、フィールドを してあるクラスのフィールドに と を する:1、 されたフィールドが するクラスのバイトコード2を つけ、その されたフィールドオブジェクト3を し、 / を する
Fieldクラスの な :
void setXX(Object obj, XX value) : ,XX
void set(Object obj, Object value):
:
obj: , static , null
value:
XX getXX(Object obj): タイプフィールドの を し、XXは データ を す
Object get(Object obj): タイプフィールドの を す
パラメータ:obj:フィールドの に するオブジェクトを します.このフィールドがstaticの 、nullに する があります.
る:フィールドの を します.1つの で を めると、コードは に コードを ります:class PP {
public String name = "ooxx";
public int age = 22;
private int sex = 1;
@Override
public String toString() {
return "name = " + name + " age = " + age + " sex = " + sex;
}
}
public class FiledDemo { public static void main(String[] args) throws Exception {
getValue();
System.out.println("----------------------------");
setValue();
}
//
private static void getValue() throws Exception {
Class clazz = PP.class;
Field f = clazz.getField("name");// public Filed
Object obj = clazz.newInstance();
Object name = f.get(obj);// name
System.out.println(name);
f = clazz.getField("age");
Object age = f.get(obj);
System.out.println(age);
f = clazz.getDeclaredField("sex");// Filed( private default public)
f.setAccessible(true);
Object sex = f.get(obj);
System.out.println(sex);
}
//
private static void setValue() throws Exception {
Class clazz = PP.class;
Field f = clazz.getField("name");// public Filed
Object obj = clazz.newInstance();
f.set(obj, "huang");
f = clazz.getField("age");
f.set(obj,33);
f = clazz.getDeclaredField("sex");// Filed( private default
// public)
f.setAccessible(true);
f.set(obj, 2);
System.out.println(obj);
}
}