Ⅰ 如何通過java的反射 修改對象的屬性的值
Fieldfield=classType.getDeclaredField("username");
//設置壓制訪問類型檢查,只有這樣,才能獲取和設置某個具體類的Field對應的值。
field.setAccessible(true);
System.out.println(field.get(privateField));
//設置私有域的值
field.set(privateField,"arthinking");
System.out.println(field.get(privateField));
Ⅱ Java通過反射可以設置私有變數的好處有哪
Java通過反射可以設置私有變數的好處有
public class PrivateTest { private String name = "hello"; public String getName() { return name; } } public class ReflectionTest { public static void main(String[] args) throws Exception { PrivateTest pt = new PrivateTest(); Class clazz = PrivateTest.class; Field field = clazz.getDeclaredField("name"); field.setAccessible(true); field.set(pt, "world"); field.setAccessible(false); System.out.println(pt.getName()); } } 這樣通過反射可以設置私有變數,Java當時設計的時候是出於什麼考慮的呢?
但是也有應用的場景,可以想到的是: hibernate中你定義實體類及相應的欄位(和資料庫表對應),你可以在映射文件中配置: 當你從資料庫中獲取到數據後,是調用類的setxxx()方法,還是直接給欄位賦值,這里欄位是可以設置成private的,用的就是反射。那java反射可以設置私有變數的值,是好處多還是壞處多呢? 問題補充:robertliudeqiang 寫道提供了一種介面吧,一般情況下不會用的。
但是也有應用的場景,可以想到的是: hibernate中你定義實體類及相應的欄位(和資料庫表對應),你可以在映射文件中配置: 當你從資料庫中獲取到數據後,是調用類的setxxx()方法,還是直接給欄位賦值,這里欄位是可以設置成private的,用的就是反射。目前反射設置private變數的值,還未看出是有好處 的。
那應該是java的一個問題遺留,為了兼容沒法解決的。
Ⅲ JAVA中反射是什麼
JAVA中反射是動態獲取信息以及動態調用對象方法的一種反射機制。
Java反射就是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;並且能改變它的屬性。而這也是Java被視為動態語言的一個關鍵性質。
Java反射的功能是在運行時判斷任意一個對象所屬的類,在運行時構造任意一個類的對象,在運行時判斷任意一個類所具有的成員變數和方法,在運行時調用任意一個對象的方法,生成動態代理。
(3)java反射設置值擴展閱讀:
JAVA中反射實例:
1、Class superClass=clazz.getSuperclass();//獲取父類。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces();//獲取實現介面。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors();//構造方法。
System.out.println("getConstructors:"+cons.length)。
參考資料來源:網路: JAVA反射機制
Ⅳ 關於java反射給屬性進行賦值的問題!
Field[] fields = per1.getClass().getFields();
這句只能取到聲明為public的屬性,而你的name,age都是使用默認的private屬性。
所以取出來的fields為空。
String newvalue = oldvalue.replaceAll("小紅", "小白");
這句代碼不知是不是你手誤了,不存在小紅,就不可能轉變為小白。