⑴ 利用java反射改一下任意對象的屬性值的編碼。比如說Student對象的name值原來是GBK的,然後改成utf-8的
只要不是final的,都可以改
問題是,編碼不能改。
java內部都是unicode編碼。
輸出默認都是utf8
你要是想改編碼,就在輸出的時候重新編碼一下就可以了。不用反射。
⑵ java 反射 能直接對私有屬性賦值么不通過set方法
設置
A a = new A();
Field field = a.getClass().getDeclaredField("x");
field.setAccessible(true);
field.set(a, 1);
讀取
Field f = a.getClass().getDeclaredField("x");
f.setAccessible(true);
System.out.println(f.get(a));
⑶ 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的反射 修改對象的屬性的值
假設obj是對象的實例、有屬性叫name
Field field=obj.getClass().getDeclaredField("name");
field.set(obj, "張三");
⑸ 如何通過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反射 在只知道類名的情況下,怎樣給其中的私有屬性賦值
利用反射能
//假設類名為A
//實例化類
=newA();
//獲取class
Classc=p.getClass();
//獲取該類所有的欄位
Field[]fields=c.getDeclaredFields();
//遍歷賦值
for(inti=0;i<fields.length;i++){
StringfiledName=fields[i].getName();
//AccessibleTest類中的成員變數為private,故必須進行此操作
fields[i].setAccessible(true);
//判斷類型
Class<?>type=fields[i].getType();
//獲取欄位類型
StringtypeName=type.getName();
System.out.println(type.getName());
//對欄位進行賦值第一個參數為對象引用第二個參數為要附的值
//如果為字元串類型
if("java.lang.String".equals(typeName)){
fields[i].set(p,"1");
}
//如果為日期類型
elseif("java.util.Date".equals(typeName)){
fields[i].set(p,newDate());
}
else{
fields[i].set(p,1);
}
}
//樓主我只是簡單的寫了下。可能還需要判斷欄位名稱以及其他類型什麼的。
最後希望樓主多看看java 文檔。
⑺ java 反射給對象中的集合賦值
access to field not allowed 報的錯誤是不允許訪問那個屬性。
所以,不能直接用這個屬性賦值(那個屬性可能是私有的)。可以看下那個屬性有沒有提供 公共的 set方法。使用method.invoke(...)
看看
⑻ java能在運行期間通過反射去改變方法的返回值么
不能,反射是可以拿到對象的屬性,方案,類等信息,如一個Persion類,有name屬性,也有相應的get/set方法,你可以通過反射去修改這個name的的值,但你不能在運行getName方法時去改變它的返回值,必須利用代理,在方法外面做攔截。 利用AOP,在返回前改變值即可,Aop的核心也就是動態代理。
⑼ 如何通過反射動態修改函數的定義
如何通過反射動態修改函數的定義
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
JAVA反射(放射)機制:「程序運行時,允許改變程序結構或變數類型,這種語言稱為動態語言」。從這個觀點看,Perl,Python,Ruby是動態語言,C++,Java,C#不是動態語言。但是JAVA有著一個非常突出的動態相關機制:Reflection,用在Java身上指的是我們可以於運行時載入、探知、使用編譯期間完全未知的classes。換句話說,Java程序可以載入一個運行時才得知名稱的class,獲悉其完整構造(但不包括methods定義),並生成其對象實體、或對其fields設值、或喚起其methods。