反射によるフィールドの取得と使用(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);
}

}