[从Java中的其他类访问私有变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[从Java中的其他类访问私有变量相关的知识,希望对你有一定的参考价值。
我希望我说的是我的话。我有一堂这样的课:
public class MainClass extends JFrame
private JLabel mainlabel;
private SampleClass sample=new SampleCalss();
public void intital()
mainlabel=new JLabel("Main");
sample.setMethod(getLabel());
//
//some code
//
add(mainlabel);
public static void main()
intital();
public JLabel getLabel()
return mainlabel;
和其他类似的类:
public class SampleClass extends JFrame
private JButton button=new JButton("Change");
private JLabel sLabel;
public SampleClass()
//somecode
//
button.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
sLabel.setText("Sample text set");
);
add(jButton);
public void setMethod(JLabbel l)
sLabel=l;
这是访问mainlabel
并从其他类更改其值的正确方法(在此示例代码中,在SampleClass
类中)是否有更好的解决方案?请注意,MainClass
是具有main
方法的类。
从另一个类访问私有变量的正确方法是使用getter和setter方法。否则,您应该将该变量设为公共。
即:
// getter
public JLabel getMainLabel()
return mainlabel;
// setter
public void setMainLabel(JLabel mainLabel)
this.mainlabel = mainLabel;
但是,直接返回私有数据是一种不好的做法-允许外部代码修改您的私有状态。通常,您应该返回私有数据的副本,以使外部代码不会与类的内部混乱。但是,如果您需要外部代码来调用私有数据上的方法,那么您可能应该在类中提供操作方法,而不是直接公开私有数据。
您可能确实想要在您的主类中创建类似setText()
和getText()
的方法,然后在setText()
上调用getText()
和mainlabel
方法。但是,您需要注意这一点,因为您可能倾向于复制类中JLabel
定义的每个方法。这将使您的类及其使用者与JLabel
实现紧密地结合在一起。如果您将来选择用其他方式替换JLabel
,则将需要大量工作才能解开已创建的耦合。
在类中,可以使用私有变量,而无需显式调用私有变量的getter方法。
所以像下面这样的头等舱
sample.setMethod(mainlabel);
并且您关于使用setter方法在different类中设置私有变量的假设是正确的。
方法的问题是,如果MainClass更改了它的JLabel(通过创建一个新的JLabel),SampleClass仍然具有对旧JLabel的引用。您可以通过构造函数或setter方法为SampleClass提供对MainClass的引用:
public class SampleClass extends JFrame
private JButton button=new JButton("Change");
private MainClass main;
public SampleClass(MainClass main)
this.main = main;
// do stuff
并且每当您需要访问MainClass的标签时,请调用其getter方法:
main.getLabel();
您可以使用Java Reflection访问私有变量并更改值。
http://download.oracle.com/javase/tutorial/reflect/member/fieldValues.html
为什么不通过setMainLabel公开mainlabel?
public void setMainLabel(JLabel mainLabel)
this.mainlabel = mainLabel;
创建一个允许访问私有变量的增变方法
public void setLabel(JLabel _label)
mainlabel = _label;
以上是关于[从Java中的其他类访问私有变量的主要内容,如果未能解决你的问题,请参考以下文章