如何在java中访问非静态私有字段?
我在一个包中有一个非静态的私有字段,我想从另一个包中访问它,但我不知道怎么做。我搜索了一下,但没有找到任何有用的东西,而且这个网站上的其他问题也不是我的问题。你唯一能做到这一点的方法就是通过反思。但这是一个黑客。你真的应该找到另一种解决办法 如果您需要这样做,那么它表明另一个包的结构设计糟糕。如果您试图操纵的类是您自己的类,那么您应该考虑更改该代码 如果您确实需要这样做,并且无法更改其他类,则可以使用以下方法:如何在java中访问非静态私有字段?,java,private,non-static,Java,Private,Non Static,我在一个包中有一个非静态的私有字段,我想从另一个包中访问它,但我不知道怎么做。我搜索了一下,但没有找到任何有用的东西,而且这个网站上的其他问题也不是我的问题。你唯一能做到这一点的方法就是通过反思。但这是一个黑客。你真的应该找到另一种解决办法 如果您需要这样做,那么它表明另一个包的结构设计糟糕。如果您试图操纵的类是您自己的类,那么您应该考虑更改该代码 如果您确实需要这样做,并且无法更改其他类,则可以使用以下方法: Field f = BadClass.class.getDeclaredField(
Field f = BadClass.class.getDeclaredField("privateField");
f.setAccessible(true);
f.set(badClassInstance, newValue);
也许最好的起点是关于反射的教程,以及
setAccessible
方法。唯一可以做到这一点的方法是通过反射。但这是一个黑客。你真的应该找到另一种解决办法
如果您需要这样做,那么它表明另一个包的结构设计糟糕。如果您试图操纵的类是您自己的类,那么您应该考虑更改该代码
如果您确实需要这样做,并且无法更改其他类,则可以使用以下方法:
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;
}
为私有字段创建getter和setter方法 例如:
public void setName ( String name )
{
this.name = name;
}
public String getName ()
{
return this.name;
}
您应该导入该非静态私有字段所在的包。
如果您想从另一个包中的子类访问此字段,可以将“private”修饰符更改为“protected”,这将允许同一项目中的所有包通过继承访问此字段。您应该导入该非静态私有字段所在的包。
如果要从不同包中的子类访问此字段,可以将“private”修饰符更改为“protected”,这将允许同一项目中的所有包通过继承访问此字段。
private
意味着只有声明此字段的类才能使用它。如果要访问它,需要定义一个公共getter。或者使用反射private
意味着只有声明字段的类才能使用它。如果要访问它,需要定义一个公共getter。或者使用反射。有关实现的更多信息,请您简要介绍一下我如何通过反射来实现,我将尽快完成这项工作,因为我没有足够的时间来研究某些内容。请您解释一下f.set方法中的badClassInstance和newValue是什么@chiastic Security有关实现的更多信息-您能简要介绍一下我如何通过反射来实现这一点吗?我将尽快完成这项工作,但没有足够的时间来研究某些内容。请您解释一下f.set方法中的badClassInstance和newValue是什么@交叉安全性我想在另一个类中使用组合框值。我制作了一个如下的getter:public String getName(){Object selectedItem=cmbProductType.getSelectedItem();String selectedItemStr=selectedItem.toString();return selectedItemStr;}但是当我以这种方式在代码中使用字段时:String str=MainView.getName();它说“不能从静态上下文引用非静态方法getName()。@Bootimar该信息改变了问题。我强烈建议将其添加到问题中,代码格式正确。同时,它是否与()我想在另一个类中使用combobox值。我制作了如下getter:public String getName(){Object selectedItem=cmbProductType.getSelectedItem();String selectedItemStr=selectedItem.toString();return selectedItemStr;}但是当我在代码中以这种方式使用字段时:String str=MainView.getName();它说“不能从静态上下文引用非静态方法getName()。@Bootimar该信息改变了问题。我强烈建议将其添加到问题中,代码格式正确。同时,它是否与()