2

这是一个简单的案例:

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

这是一个类级别的字段,因此将其称为匿名类似乎并不正确。嵌套类的 Oracle 教程页面中的其他名称或描述似乎都不合适。

我猜它类似于“单次使用对象”,但我什至很难描述它而不说“类级别命名匿名类”之类的东西


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

4

3 回答 3

4

让我们把它分成几部分

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

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

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

于 2014-10-17T06:54:49.087 回答
2

它是一个匿名类的实例,无需为此寻找新名称。

来自Oracle 文档

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

它并没有说实例只能使用一次,而只能使用类,因此与您的情况没有矛盾。

于 2014-10-17T06:56:29.350 回答
1

同意kocko's答案,但想补充一件事,

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

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

于 2014-10-17T06:57:19.210 回答