从Java中的其他类访问私有变量

Mehdi:

我希望我说的是我的话。我有这样的课:

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将来选择用其他产品代替,则需要花费大量工作才能平开已创建的联轴器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章