標題的意思是:
通過反射寫一個類,類中有個方法。該方法可以設置某個類中的某個屬性(構造方法,成員變量,成員方法)為特定的值
代碼:
1 // 該方法的參數列表是一個類的 類名、成員變量、給變量的賦值 2 public void setProperty(Object obj, String PropertyName, Object value) 3 throws NoSuchFieldException, SecurityException, 4 IllegalArgumentException, IllegalAccessException { 5 6 // 獲取obj類的字節文件對象 7 Class c = obj.getClass(); 8 9 // 獲取該類的成員變量 10 Field f = c.getDeclaredField(PropertyName); 11 12 // 取消語言訪問檢查 13 f.setAccessible(true); 14 15 // 給變量賦值 16 f.set(obj, value); 17 18 }
測試類:
1 public static void main(String[] args) throws NoSuchFieldException, 2 SecurityException, IllegalArgumentException, IllegalAccessException { 3 4 // 創建Person類的對象 5 Person p = new Person(); 6 // 私有成員變量無法直接訪問 7 // 這時候就通過剛剛寫的Tool類來直接調用 8 Tool t = new Tool(); 9 // 通過Tool的方法直接更改私有成員變量name 10 t.setProperty(p, "name", "張三"); 11 // 更改未定義類型成員變量 12 t.setProperty(p, "age", 13); 13 // 更改公共成員變量 14 t.setProperty(p, "sex", '男'); 15 System.out.println(p); 16 17 // 其實除了私有成員變量,其它的都可以通過以前的方法賦值 18 } 19 20 } 21 22 class Person { 23 // 該類有私有成員變量,未定義類型成員變量,公共成員變量 24 private String name; 25 int age; 26 public char sex; 27 28 @Override 29 public String toString() { 30 return name + "--" + sex + "--" + age; 31 } 32 33 }