【问题标题】:What is the purpose of this construction? [duplicate]这种建设的目的是什么? [复制]
【发布时间】:2021-08-13 19:53:31
【问题描述】:

我看到了一个使用 AWT 框架的 Java 程序示例,它包含以下代码:

mainFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent windowEvent) {
        System.exit(0);
    }        
});

new WindowAdapter() 部分看起来像创建一个 WindowAdapter 类实例,但 WindowAdapter() { ... } 部分看起来像一个类(或可能是其他东西)声明,其中包含一个方法。那么这里到底发生了什么?

【问题讨论】:

  • 一个合乎逻辑的猜测是,当用户关闭窗口(可能是框架)时,他们希望通过事件注意到该操作并进行一些最终处理
  • @Mat 适配器类是类而不是接口。它们使用空方法体实现接口方法,因此用户可以覆盖他们想要的方法,而无需显式提供空方法。

标签: java swing


【解决方案1】:

这是一个匿名的内部类。见https://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html。在 Java 的早期版本中,关于是否提供 lambdas 存在分歧,匿名类是一种折衷方案。

贴出的代码是一个匿名类扩展WindowAdapter,它有各种方法的无所事事的实现。用户只需填写那些用于需要处理的事件的方法。因为该类在其他任何地方都没有相关性,所以在这里使用匿名类意味着开发人员不必为它创建单独的类定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2020-11-23
    • 2012-07-13
    • 2013-07-20
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多