Android求生之路Java认真看

Class.getField和getDeclaredField的

2017-06-22  本文已影响0人  STEVENNO1

getField和getDeclaredField都是Class类的方法,反射成员变量时使用。(getMethod和getDeclaredMethod类似)

getField

获取一个类的 ==public成员变量,包括基类== 。

getDeclaredField

获取一个类的 ==所有成员变量,不包括基类== 。

Field.setAccessible

成员变量为private,必须进行此操作。

示例

public class MyUtil {    
    
    public static void main(String[] args) {    
       testFields();    
    }    
        
    public static void testFields() {    
        try {    
            System.out.println("Declared fields: ");    
            Field[] fields = Dog.class.getDeclaredFields();    
            for(int i = 0; i < fields.length; i++) {    
                System.out.println(fields[i].getName()); // 此处结果是color, name, type, fur    
            }    
                
            System.out.println("Public fields: ");    
            fields = Dog.class.getFields();    
            for(int i = 0; i < fields.length; i++) {    
                System.out.println(fields[i].getName()); // 此处结果是color, location    
            }    
    
            Dog dog = new Dog();    
            dog.setAge(1);    
            Method method = dog.getClass().getMethod("getAge", null);    
            Object value = method.invoke(dog);    
            System.out.println(value); // 此处结果是1    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
    }    
    
}    
    
class Dog extends Animal {    
    public int color;    
    protected int name;    
    private int type;    
    int fur;    
}    
    
class Animal {    
    public int location;    
    protected int age;    
    private int height;    
    int length;     
    
    public int getAge() {    
        return age;    
    }    
    
    public void setAge(int age) {    
        this.age = age;    
    }    
}
上一篇下一篇

猜你喜欢

热点阅读