java 27 - 8 反射之 通過反射來設置某個對象的某個屬性為指定值


標題的意思是:

  通過反射寫一個類,類中有個方法。該方法可以設置某個類中的某個屬性(構造方法,成員變量,成員方法)為特定的值

 

代碼:

  

 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM