【问题标题】:How do I access fields in my class from an inner class?如何从内部类访问我的类中的字段?
【发布时间】:2014-06-13 23:10:29
【问题描述】:

我的班级看起来像:

public class Suwak extends JFrame {
  JSlider slider;
  JLabel lblWartosc;
  static int wartosc=0;

  public Suwak() {
    event e = new event();
    slider.addChangeListener(e);
  }

  public class event implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
        wartosc = slider.getValue();
        lblWartosc.setText("Wartosc:"+ wartosc);
      }
  }
}

我有另一个班级Operationsmethod1(int wartosc)。当我在那个方法中时,如何引用Suwaks 成员变量wartosc 以便它可以在内部类event 中使用。

我在课堂上尝试过这样做Operation

Suwak slider = new Suwak();
method1(slider.slider.getValue());

但这只显示一个变量。

【问题讨论】:

  • 您有问题吗?
  • 在我看来 wartosc 是在外部类中声明的。
  • 是的,在外部声明但在内部发生变化我想从内部类事件中获取wartosc

标签: java inner-classes


【解决方案1】:

如果我理解正确,您希望能够设置一个带有更改侦听器(内部类)的Suwak,该侦听器可以访问Suwaks 成员变量,并且您希望能够从其他一些类,可能在Suwaks 包之外。

最干净的 (imo) 方法是在构造 Suwak 实例时将引用传递给 event 实例。这保留了封装;你的Operations 类不需要知道Suwakevent 的成员变量。

在本例中,我要将您的 event 类重命名为 SuwakChangeListener,因为 event 是一个令人困惑的名称。

在你的班级Suwak:

static int wartosc; // Class variable
JLabel lblWartosc; // Member variable

public Suwak() {
     // Pass reference to Suwak instance into SuwakChangeListener's constructor
    SuwakChangeListener e = new SuwakChangeListener(this);
    slider.addChangeListener(e);
    System.out.println(wartosc);
}

public class SuwakChangeListener implements ChangeListener {
    Suwak instance;

    /**
      * @param suwakInstance The instance of Suwak that this change listener is working with.
      */
    SuwakChangeListener(Suwak suwakInstance) {
        // Remember the instance.
        instance = suwakInstance;
    }

    public void stateChanged(ChangeEvent e){
        // This accesses the class variable of Suwak.
        Suwak.wartosc = slider.getValue();
        // This accesses the member variable of instance.
        instance.lblWartosc.setText("Wartosc:"+ Suwak.wartosc);
    }
}

一般来说,最好使用访问器(getter)和修改器(setter),而不是直接访问成员和类变量。但两种方式都有效。

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2011-01-02
    相关资源
    最近更新 更多