1. 程式人生 > >JAVA反射之 Field (屬性)

JAVA反射之 Field (屬性)

主要方法:

public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("Person");
        //得到類中所有方法,返回一個數組
        Field[] fileds = clazz.getFields();
        //得到所有方法包括私有方法
        Field[] fields2 = clazz.getDeclaredFields();
        //得到方法
        Field field = clazz.getDeclaredField("name");
        
//暴力訪問,訪問私有屬性 field.setAccessible(true); //通過類例項化物件,通過呼叫類的無參構造器去例項化物件 Object object = clazz.newInstance(); //給物件屬性賦值 field.set(object, "hhh"); //物件型別 Class s = field.getType();//class java.lang.String System.out.println(s); //物件名稱 field.getName();
//獲取物件屬性值 field.get("name"); }

暴力訪問會破壞物件的封裝性,解決方法為:

//破壞封裝性,解決方式(內省機制):
        Class<?> clazz1 = Class.forName("Person");
        // 建立物件
        Object person = clazz1.newInstance();
        // 獲得屬性描述器
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor("setName", clazz1);
        
// 獲得set方法 Method setMethod = propertyDescriptor.getWriteMethod(); // 呼叫方法 person.setName("jack"); setMethod.invoke(person, "jack"); System.out.println(person);