【问题标题】:Java: Short form to create an instance of a class that implements an interfaceJava:创建实现接口的类的实例的简写形式
【发布时间】:2018-06-30 23:27:51
【问题描述】:

我想使用new 运算符创建一个JPanel 的实例,该实例实现ActionListener 并直接覆盖actionPerformed 方法。

我试过了

JPanel panel = new JPanel implements ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        // ...
    }
};

但由于语法错误,这不起作用。

当然,我可以定义一个像JPanelWithActionListener 这样的新类,然后用new 调用这个类,但是有没有什么方法可以在一行中完成?

【问题讨论】:

  • 不,你需要有一个(超级)类型来实现。在您的情况下,您需要定义某种继承JPanelActionListener 的类/接口。但如果你已经拥有它,我建议不要使用匿名内部类。
  • 无论如何,让面板实现ActionListener 通常是一种有问题的方法。

标签: java new-operator implements


【解决方案1】:

这在 Java 中是不可能的——Java 中没有匿名类型。

您的代码new JPanel implements ActionListener() { /*...*/ }; 与此代码等效。

class JPanelWithActionListener extends JPanel implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }
}
JPanel panle = new JPanelWithActionListener();

您想创建一个新类型 JPanelWithActionListener 而不定义类(因此,该类是匿名的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多