当前位置: 首页 > 面试题库 >

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

微生景胜
2023-03-14
问题内容

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

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



 类似资料:
  • 问题内容: 我有以下课程 你好 嗨.java CustomMap.java 直到我从中删除访问说明符之前,这都可以正常工作 编译器大喊 类型speak.hi.CustomMap不 可见 现在,如果我没有修改的选项(第三方jar等),还有什么我可以使用的方法吗? 我知道的一个选项是转到,因为Hello已在程序包中,它可以访问程序包私有类。 还有其他方法吗?也许使用反射? 编辑 :按@StephenC

  • 在Mainactive类中,我无法访问gamePanel变量或对象。在程序中稍后的其他类中,它运行良好。我遇到了以下错误: 类主要活动: 类游戏面板:

  • 问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:

  • 我知道如何访问私有变量,但我正在尝试测试以下类: ProcessStatusResult: 在我的测试中,我需要在ProcessStatusBody中获取ProcessStatus来验证它,但我不知道如何做到这一点。 有没有一种方法可以使用反射(或其他方法)来访问它,而不必仅仅为了测试而在ProcessStatusResult中添加getter?

  • 我正在尝试将我用Python制作的游戏移植到Java。在Python版本中,我将所有的方法和变量都放在一个“类”中,玩家是这样的字典: 游戏派克 然后分别添加玩家的数据值: 在Java版本中,我有一个单独的类用于定义玩家对象,以及游戏的主方法。 例如(这是一个小版本): 游戏java(省略返回) 游戏者java(省略返回) 假设,当要编译的两个类一起编译时,程序将能够运行,因为主变量是公共变量,并

  • 问题内容: 假设我们有一个包含私有实例变量的类。 现在,让我们有另一个类,其中。如果在中没有定义访问器方法,可以在访问变量中使用非静态方法吗? 顺便说一下,我在用Java工作。 问题答案: 不,不符合Java语言规范,第3版: 6.6.8示例:私有字段,方法和构造函数 私有类成员或构造函数只能在包含该成员或构造函数声明的顶级类(第7.6节)的主体内访问。它不是子类继承的。 但是不管这种语言限制如何