繁体   English   中英

如何在Java中访问非静态私有字段?

[英]How to access a non-static private field in java?

我在一个程序包中有一个非静态私有字段,想从另一个程序包中访问它,但是我不知道该怎么做。 我进行了搜索,但没有找到任何有用的信息,并且本网站中的其他问题也并非我的问题。

您可以执行此操作的唯一方法是通过反射。 但这是黑客。 您确实应该找到另一种解决方法。

如果您需要这样做,则表明另一个软件包的结构设计不良。 如果您要操作的类是您自己的类,则应考虑更改该代码。

如果您确实需要这样做并且不能更改其他类,则可以使用以下方法:

Field f = BadClass.class.getDeclaredField("privateField");
f.setAccessible(true);
f.set(badClassInstance, newValue);

最好的起点可能是有关反射的教程以及setAccessible方法。

为私有字段创建getter和setter方法。

例:

public void setName ( String name )
{
      this.name = name;
}

public String getName ()
{
     return this.name;
}

您应该将软件包导入该非静态私有字段所在的位置。 如果要从不同包中的子类访问此字段,则可以将“ private”修饰符更改为“ protected”,这将允许同一项目中的所有包通过继承访问此字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM