導航:首頁 > 編程語言 > java反射私有屬性

java反射私有屬性

發布時間:2022-04-27 02:12:44

java中私有屬性可以通過反射獲取,那設置成私有是不是沒多大意思

私有、公有這些訪問控制,主要是針對類的擴展或子類化設置的,針對現實世界的抽象和封裝。

一般都是一些Web框架需要用反射,日常代碼裡面一般不用,用到的時候一般來說破壞了面向對象的特性。

㈡ 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里一個私有的屬性如何在其他類裡面進行訪問

既然是私有屬性就不建議直接訪問的,一般會提供方法來訪問私有屬性,這樣可以在方法中對屬性的訪問做一些控制。
當然也可以通過反射來直接訪問。
我們准備一個包含私有屬性的類
然後通過反射來訪問屬性,記得一定要加aField.setAccessible(true);這句代碼,不然就不能訪問私有屬性。
不加aField.setAccessible(true);
加了aField.setAccessible(true);

㈤ 一個java對象的屬性是私有的,而且沒有提供public的get和set方法,可以用反射的方式將其轉成json嗎

如果提供了get和set方法是可以實現的,因為變數是私有的,只能通過外部公用方法去訪問這些變數,如果沒有這些方法就只能通過本類訪問,其他類沒有辦法訪問

㈥ 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版《我的世界》Forge反射找不到私有方法和屬性名是什麼原因

你好,很高興回答你的問題。

試試getDeclaredFields和getDeclaredMethods。

如果有幫助到你,請點擊採納。

㈧ java反射機制怎麼判斷一個屬性是否為私有屬性

private,public類似與 WEB系統中管理員,普通用戶許可權 . 是一種許可權安全機制 反射的主要目的並不在與看到私有方法,更重要的是能在運行時可以動態自查自己的結構,在開發某些功能時特別有用, 例如:(1)把XML節點自動映射後JAVA BEAN中.

㈨ java反射訪問私有方法的的問題

java的反射可以繞過訪問許可權,訪問到類的私有方法和成員。可能這點會引起安全性的討論。反射的使用幫助解決很多復雜的問題,其運行時的類型檢查,動態調用,代理的實現等,反射為我們寫程序帶來了很大的靈活性,很多功能都是基於反射。
利用反射還可以訪問內部類、匿名內部類的私有屬性。
用java自帶的java -private 類名 反編譯命令可以查看類的完整定義。(參考think in java)
下面舉例子說明。首先定義一個介面
Java代碼
public interface Ref {
public void f();
}
public interface Ref {
public void f();
}
介面的實現類
Java代碼
public class RefImpl implements Ref {
//實現介面方法
public void f() {
System.out.println("public method f()");
}

void g(String args){
System.out.println("package method g():" + args);
}

private void w(){
System.out.println("private method w()");
}
}
public class RefImpl implements Ref {
//實現介面方法
public void f() {
System.out.println("public method f()");
}

void g(String args){
System.out.println("package method g():" + args);
}

private void w(){
System.out.println("private method w()");
}
}
測試類
Java代碼
public class TestRef {

public static void main(String[] args) {
Ref ref = new RefImpl();
System.out.println(ref.getClass().getSimpleName()); //RefImpl類型
ref.f(); //調用介面方法
// ref.g(); //向上轉型後實現類添加的方法不能調用
if(ref instanceof RefImpl){
RefImpl ref1 = (RefImpl)ref; //類型識別後轉型
ref1.g("zhouyang");
// ref1.w(); //私有方法不能訪問
}

//通過反射調用方法
try {
Ref ref2 = new RefImpl();
Method m = ref2.getClass().getDeclaredMethod("f");
Method m1 = ref2.getClass().getDeclaredMethod("g", String.class);//有參的方法
Method m2 = ref2.getClass().getDeclaredMethod("w");
System.out.println("==============");
m.invoke(ref); //調用方法f()
m1.invoke(ref, "yangzhou");

m2.setAccessible(true);///調用private方法的關鍵一句話
m2.invoke(ref);
} catch (Exception e) {
e.printStackTrace();
}

//java的javap反編譯能夠查看類的信息,-private 開關能夠打開所有信息
//javap -private 類名 類必須是編譯成.calss 文件

//利用反射訪問私有成員,改變私有成員值,但是final域可以訪問不可改變
PrivateField pf = new PrivateField();
// ps.ss; //私有成員不能訪問
//列印原來的成員值
pf.print();
try {
//反射訪問和改變原來值
Field[] f = pf.getClass().getDeclaredFields();
for(int i=0;i<f.length;i++){
f[i].setAccessible(true);
System.out.println(f[i].getType());//列印欄位類型
System.out.println(f[i].get(pf)); //列印值
if("ss".equals(f[i].getName())){
f[i].set(pf, "hehe"); //修改成員值
}else{
f[i].setInt(pf, 55);
}

}
//重新列印修改後的成員值,final域值不變
pf.print();
} catch (Exception e) {
e.printStackTrace();
}
/*列印輸出的結果
* RefImpl
public method f()
&nb

㈩ Java反射 在只知道類名的情況下,怎樣給其中的私有屬性賦值

利用反射能

//假設類名為A
//實例化類
Ap=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反射私有屬性相關的資料

熱點內容
銀河麒麟字體庫存在哪個文件夾 瀏覽:956
魔獸加丁伺服器的航空叫什麼 瀏覽:152
花冠改裝案例哪個app多 瀏覽:515
成績單app哪個好用 瀏覽:140
北美程序員vs國內程序員 瀏覽:181
php解析xml文檔 瀏覽:121
石墨文檔APP怎麼橫屏 瀏覽:185
牆主鋼筋加密和非加密怎麼看 瀏覽:144
金山區文件夾封套定製 瀏覽:708
soho程序員 瀏覽:672
java位元組截取 瀏覽:525
php提交作業 瀏覽:815
房產還沒解壓可以辦理贈予嗎 瀏覽:224
java毫秒轉分鍾 瀏覽:753
模式識別中文pdf 瀏覽:774
c語言平均數字編譯錯誤 瀏覽:170
單片機算交流 瀏覽:45
php自適應網站 瀏覽:467
2b2t伺服器怎麼獲得許可權 瀏覽:816
c語言javaphp 瀏覽:804