这个代码结构有名称吗?

时间:2014-10-17 06:51:55

标签: java code-structure

这是一个简单的案例:

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

这是一个类级字段,因此将其称为匿名类似乎不对。 Nested Classes上的Oracle Tutorials页面中的其他名称或描述似乎都不适合。

我猜这是“单一用途对象”的行为,但是我很难描述它而没有说“类级命名匿名类”


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

3 个答案:

答案 0 :(得分:4)

让我们分成几部分

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

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

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

答案 1 :(得分:2)

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

来自Oracle docs

  

匿名类使您可以使代码更简洁。他们   使您能够同时声明和实例化一个类。他们   就像当地的班级,除了他们没有名字。使用它们   如果你只需要使用一次本地课程。

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

答案 2 :(得分:1)

同意kocko's回答,但想添加一件事,

  

Anonymous classes are expressions,表示您在另一个表达式中定义类。

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