这个代码结构有名字吗



这里有一个简单的例子:

    private final MouseAdapter mouse = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            calculate();
        }
    };

这是一个类级别的字段,所以称它为匿名类似乎是不对的。嵌套类上的Oracle教程页面中的其他名称或描述似乎都不适合。

我猜这是一个类似于"一次性对象"的东西,但我很难在描述它时不说"类级命名匿名类"之类的话


对于那些不熟悉Java和AWT的人,我正在创建一个类的实例,该类没有操作方法来实现用于监听鼠标操作的接口。我想要一个实际的实例,这样我就可以将其添加为多种类型的侦听器(轮子、运动和单击),但使用相同的对象进行控制。然而,这个问题本身并不是AWT特有的。

让我们把它分成几块

  • private final MouseAdapter mouse被称为类成员,该类型(MouseAdapter)表示该成员可以引用MouseAdapter的实例和/或子类。

  • new MouseAdapter() { ... }被称为MouseAdapter接口/抽象类的匿名实现

因此,总结一下:类成员mouse拥有对MouseAdapter接口/抽象类的匿名实现的引用。

它是一个匿名类的实例,不需要为此找到新名称。

来自Oracle文档:

匿名类使您的代码更加简洁。他们使您能够同时声明和实例化一个类。他们类似于本地类,只是它们没有名称。使用它们如果您只需要使用一次本地类。

它并没有说实例只使用一次,而是只使用类,所以与您的情况没有矛盾。

同意kocko's的答案,但想添加一件事,即

匿名类是表达式, 这意味着您在另一个表达式中定义该类。

因此,无论您在哪里声明它,它都将保持匿名类,无需对声明进行不同的命名。:)

相关内容

  • 没有找到相关文章

最新更新