是否有一些直接或间接的方式从另一个类访问私有对象?
答案 0 :(得分:3)
嗯,反思真的是你唯一的希望。它是您可以检查对象场的唯一方法,而不必过多关注其可见性修饰符。
Entity entity = new Entity();
for(Field f : entity.getClass().getDeclaredFields()) {
try {
f.setAccessible(true);
System.out.println(f.get(entity));
} catch(IllegalAccessException e) {
e.printStackTrace();
}
}
但是,我确实希望 强烈 警告你重置字段的可访问性。
如果您在高度并发的环境中运行,并且在完成后立即禁用了辅助功能,那么您将遇到一个案例,其中在一个线程中删除了辅助功能,因为您和#39重新读到另一个,这将导致一个巨大的,混乱的混乱。
此时,您拥有可见性修饰符这一事实变得没有实际意义,您可能只想使用零件和包裹获取器(或将字段设为public
,这让很多人觉得很奇怪。)
答案 1 :(得分:1)
通常的方法是为私有变量创建getter / setter方法。
E.g。
private String myData;
public String getMyData () {
return myData;
}
public void setMyData (String myData) {
this.myData = myData;
}
如果您不想这样做,那么您可以使用反射来访问私有变量。见http://docs.oracle.com/javase/tutorial/reflect/
答案 2 :(得分:-1)
您无法从其他类访问私有对象/变量。一种方法是使用getter和setter:
公共类Sample { 私有字符串名称;
//setter
public void setName(String yourname){
this.name = yourname;
}
//getter
public String getName(){
return name;
}
}
class AccessPrivateVariable { public static void main(String [] args){
Sample sample = new Sample();
/*call the setter from Sample class and pass value
to its parameter*/
sample.setName("Andrew");
/*
access the name "Andrew" by calling getter
*/
System.out.println("Welcome " + sample.getName());
}
}