我在包中有一个非静态私有字段,并希望从另一个包访问它但我不知道该怎么做。我搜索过但没有找到任何有用的东西,本网站的其他问题并不是我的问题。
答案 0 :(得分:3)
你能做到这一点的唯一方法就是通过反思。但它是一个黑客。你真的应该找到另一种方式。
如果你需要这样做,那么它表明另一个包具有设计糟糕的结构。如果您尝试操作的课程属于您自己的课程,则应该考虑更改该代码。
如果你真的需要这样做而且你不能改变其他课程,你可以这样做:
Field f = BadClass.class.getDeclaredField("privateField");
f.setAccessible(true);
f.set(badClassInstance, newValue);
最好的起点可能是反思教程和setAccessible
方法。
答案 1 :(得分:2)
为私有字段创建getter和setter方法。
示例:
public void setName ( String name )
{
this.name = name;
}
public String getName ()
{
return this.name;
}
答案 2 :(得分:0)
您应该导入非静态私有字段所在的包。 如果要从不同包中的子类访问此字段,可以将“private”修饰符更改为“protected”,这将允许同一项目中的所有包通过继承访问此字段。