[英]I am trying to access a private member variable through reflection but getting java.lang.NoSuchFieldException
public class AccessPrivateMember {
private String privateName;
public AccessPrivateMember(String privateName) {
super();
this.privateName = privateName;
}
public String getPrivateName() {
return privateName;
}
public void setPrivateName(String privateName) {
this.privateName = privateName;
}
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
AccessPrivateMember objAccessPrivateMember = new AccessPrivateMember("Secret Name");
/*
* Field reflectionAPIField=
* objAccessPrivateMember.getClass().getDeclaredField("privateName"); String
* secretName = (String) reflectionAPIField.get(objAccessPrivateMember);
* System.out.println("secretName="+secretName);
*/
Field reflectionAPIField2= AccessPrivateMember.class.getClass().getDeclaredField("privateName");
reflectionAPIField2.setAccessible(true);
String secretName2ndWay = (String) reflectionAPIField2.get(objAccessPrivateMember);
System.out.println("secretName2ndWay="+secretName2ndWay);
}
}
例外
Exception in thread "main" java.lang.NoSuchFieldException: privateName
at java.lang.Class.getDeclaredField(Unknown Source)
at io.java.interview.AccessPrivateMember.main(AccessPrivateMember.java:31)
第 31 行是
Field reflectionAPIField2 = AccessPrivateMember.class.getClass().getDeclaredField("privateName");
他,歡迎來到 Stackoverflow。
以下行不正確:
Field reflectionAPIField2= AccessPrivateMember.class.getClass().getDeclaredField("privateName");
reflectionAPIField2.setAccessible(true);
將此更改為
Field reflectionAPIField2= AccessPrivateMember.class.getDeclaredField("privateName");
reflectionAPIField2.setAccessible(true);
如此處所述
如果 object 的實例可用,那么獲取其 Class 的最簡單方法是調用 Object.getClass()。
在您的代碼中Field reflectionAPIField2= AccessPrivateMember.class
不是一個實例,因此它不起作用。
只需將您的第 31 行更改為
Field reflectionAPIField2 = AccessPrivateMember.class.getDeclaredField("privateName");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.