【问题标题】:How to access a value of a private instance variable from a different class?如何从不同的类访问私有实例变量的值?
【发布时间】:2017-03-04 13:38:03
【问题描述】:

我正在用 Java 创建一个简单的 GUI 游戏(猜数字)。

显然,我有一个名为 Give Up 的按钮。

当我点击Give Up 按钮时,我想在文本区域显示答案。

但是,targetNumber 变量被声明为私有:

public class GameUtility {
    private String targetNumber = "2543";

    //rest of the code
}

class GiveUpButton implements ActionListener { //Inner class
    public void actionPerformed(ActionEvent gEvent) {

        GameUtility utility = new GameUtility();
        textArea.append(utility.targetNumber); //How to access the value of targetNumber?
    }
}

如何访问私有变量的值?

【问题讨论】:

  • 私有成员或方法只能在其自己的类中访问。您需要访问器。其背后的原理叫做封装。
  • 当您不想创建getter/setter 方法时,您可能对使用reflection 感兴趣。请注意,这是一个肮脏的黑客攻击。

标签: java user-interface


【解决方案1】:

要使托管 bean 的状态为 accessible,您需要为该状态添加 settergetter 方法。

添加 setter 和 getter(访问器)方法后,您可以更新和访问 private 实例的值。代码应类似于以下示例:

public class AccessorExample {
    private String attribute;

    public String getAttribute() {
        return attribute;
    }

    public void setAttribute(String attribute) {
        this.attribute = attribute;
    }
}

允许从类外部访问private实例内部的信息,只有当他们通过提供的机制询问时,我们才会调用方法。我们可以调用getter 方法(例如accessorExample.getAttribute();)来要求对象显示有关其自身的信息的机制。

【讨论】:

【解决方案2】:

private 修饰符意味着您无法直接访问该属性。但也许更重要的是,private 暗示您不应该直接访问该属性。创建一个getter 以提供对外部类的访问:

public class GameUtility {
    private String targetNumber = "2543";

    public String getTargetNumber() {
        return targetNumber;
    }

    //rest of the code
}

class GiveUpButton implements ActionListener {
    public void actionPerformed(ActionEvent gEvent) {
        GameUtility utility = new GameUtility();
        textArea.append(utility.getTargetNumber());
    }
}

另请参阅:Java Documentation on Access Control

【讨论】:

    【解决方案3】:

    推荐的方法是创建适当的GettersSetters

    See this post to get more insights as how do getters and setters work?

    public class AccessorExample {
        private String attribute;
    
        public String getAttribute() {
            return attribute;
        }
    
        public void setAttribute(String attribute) {
            this.attribute = attribute;
        }
    }
    

    大多数 IDE 都支持直接生成 getterssetters

    1. Generate Getters and setters in Netbeans.
    2. Generate Getters and setters in Eclipse.

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 1970-01-01
      • 2013-08-03
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多