java - 无法实例化私有(private)类

标签 java swing jbutton actionlistener

我是 Java swing 的首次用户,这是我第一次尝试使用私有(private)类。

我正在尝试以下代码 -

ActionListener listener = new AddButtonListener();

其中AddButtonListener是实现ActionListener接口(interface)的私有(private)类。

private class AddButtonListener implements ActionListener{
  public void actionPerformed(ActionEvent e){
  ....
  }
}

但是,我收到一个 Eclipse 错误,内容为

No enclosing instance of type someType is accessible. Must qualify the allocation with an enclosing instance of type someType (e.g. x.new A() where x is an instance of someType).

请注意,该类正在 someType 内的静态 main 方法中实例化。

为什么会出现这个错误?是因为main方法是静态的吗?

最佳答案

由于AddButtonListener是一个内部类并且不是静态的,因此只能使用外部类的对象来实例化它。

例如,如果您的 AddButtonListener 类是在 SomeType 中定义的,则

SomeType obj = new SomeType();

SomeType.AddButtonListener listener = obj.new AddButtonListener();

如果您使用 SomeType 中的某个方法,那么您将创建此非静态内部类的对象,如下所示

AddButtonListener listener = this.new AddButtonListener();

如果您想创建 AddButtonListener 的实例而不使用 SomeType(封闭类型)的实例,那么您应该将 AddButtonListener 标记为静态类。

private static class AddButtonListener implementsActionListener{
    public void actionPerformed(ActionEvent e){
        ....
    }
}

所以,这不是关于类是私有(private)的,而是关于它不是静态的。

关于java - 无法实例化私有(private)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994750/

相关文章:

java - Docker 外部数据库映射

java - 突出显示 JTextPane 中的第一行

Java - PaintComponent 不会在 JPanel 上显示绘图

java - 按下 JButton 后多次生成 JPanel "blink"

java - gridLayout 中的拉伸(stretch)按钮

java - Camel REST Bean 链接

java - 当我对自引用实体进行查询时出现 SQLException

java - java中JLabel圆角的最简单代码

java - isVisible() 是否保证JAVA中UI对象的可见性

java - JTree 和 JButtons - 鼠标悬停在 Button 上时渲染错误