【问题标题】:Inner class calling [duplicate]内部类调用[重复]
【发布时间】:2015-11-22 10:57:57
【问题描述】:

我有 class BubblesFrameinner class startnewGame

 public class startNewGame implements ActionListener{
        public void actionPerformed(ActionEvent event){

            remove(panel);
            panel = new BubbleMainPanel();
            add(panel);
            validate();
            panel.repaint();

        }
    }

classMenu我想添加event handlerstartNewGame

 ActionListener listener = new BubblesFrame.startNewGame();
        newGame.addActionListener(listener);

但它返回以下错误:

没有可以访问 BubblesFrame 类型的封闭实例。必须 使用类型的封闭实例限定分配 BubblesFrame(例如 x.new A() 其中 x 是 BubblesFrame 的一个实例)

我的内部类有什么问题?

【问题讨论】:

  • 请大写您的班级名称。
  • 那是因为你忘了用一个新的关键字来实例化你的内部类。

标签: java inner-classes


【解决方案1】:

制作startNewGamestatic

【讨论】:

    【解决方案2】:

    如果您的内部类不是静态的,请使用此方法:

     ActionListener listener = new BubblesFrame().new startNewGame();
    

    如果 startNewGame class 是 static 你可以像以前一样做:

    ActionListener listener = new BubblesFrame.startNewGame();
    

    【讨论】:

      【解决方案3】:

      您确实实例化了您的外部类,但您忘记实例化您的内部类。

      BubblesFrame f = new BubblesFrame();  //Instantiate outer class
      ActionListener listener = f.new startNewGame(); //Instantiate inner class
      

      我更好奇,当你的 BubblesFrame 是 listener 时,你为什么要公开你的内部类。您可能想再次查看您的设计模式。

      通常是匿名类或私有类。

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 2021-11-28
        • 2020-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        相关资源
        最近更新 更多