从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方法。否则,您应该将该变量公开。
那是:
// getterpublic JLabel getMainLabel() {
return mainlabel;
}
// setter
public void setMainLabel(JLabel mainLabel) {
this.mainlabel = mainLabel;
}
但是,直接返回私有数据是一种不好的做法-
允许外部代码修改您的私有状态。通常,您应该返回私有数据的副本,以使外部代码不会干扰类的内部。但是,如果您需要外部代码来调用私有数据上的方法,那么您可能应该在类中提供操作方法,而不是直接公开私有数据。
您可能 真的
想在主类中创建像setText()
和方法getText()
,然后在上调用setText()
和getText()
方法mainlabel
。但是,您需要注意这一点,因为您可能倾向于复制JLabel
类中定义的每个方法。这将使您的类及其使用者与JLabel
实现紧密结合。如果您JLabel
将来选择用其他产品代替,则需要花费大量工作才能平开已创建的联轴器。
以上是 从Java中的其他类访问私有变量 的全部内容, 来源链接: utcz.com/qa/408883.html