gpt4 book ai didi

java - 从java中的其他类访问私有(private)变量

转载 作者:搜寻专家 更新时间:2023-11-01 03:12:06 24 4
gpt4 key购买 nike

我希望我是认真的。我有这样的类(class):

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 方法的类。

最佳答案

从另一个类访问私有(private)变量的正确方法是使用 getter 和 setter 方法。否则,您应该公开该变量。

即:

// getter
public JLabel getMainLabel() {
return mainlabel;
}

// setter
public void setMainLabel(JLabel mainLabel) {
this.mainlabel = mainLabel;
}

但是,直接返回私有(private)数据是一种不好的做法——这允许外部代码修改您的私有(private)状态。通常,您应该返回私有(private)数据的副本,这样外部代码就不会干扰类的内部结构。但是,如果您需要外部代码来调用您的私有(private)数据的方法,那么您可能应该在您的类中提供操作方法,而不是直接公开私有(private)数据。

您可能真的想要创建类似 setText() 的方法和 getText()在你的主类中,然后调用 setText()getText() mainlabel 上的方法.但是,您需要注意这一点,因为您可能倾向于复制 JLabel 定义的每个方法。在你的课上。这将使你的类和它的消费者与 JLabel 紧密耦合。执行。如果您选择更换JLabel对于 future 的其他事情,解除您创建的耦合将需要大量工作。

关于java - 从java中的其他类访问私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com