这是一个简单的案例:
private final MouseAdapter mouse = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
calculate();
}
};
这是一个类级字段,因此将其称为匿名类似乎不对。 Nested Classes上的Oracle Tutorials页面中的其他名称或描述似乎都不适合。
我猜这是“单一用途对象”的行为,但是我很难描述它而没有说“类级命名匿名类”
对于那些不熟悉Java和AWT的人,我正在创建一个具有无操作方法的类的实例,以实现用于侦听鼠标操作的接口。我想要一个实际的实例,所以我可以将它添加为多种类型的侦听器(wheel,motion和click),但使用相同的对象进行控制。问题本身并不是特定于AWT。
答案 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,表示您在另一个表达式中定义类。
因此,无论您在何处声明它,它都将保持匿名类,无需以不同方式命名您的声明。 :)