我有一个与此类似的java代码:
AnObject anObject = new AnObject() {
int count;
public int creation() {
return count;
}
};
我无法理解大括号的含义。构造函数后面的类? 谢谢!
答案 0 :(得分:15)
基本上,它是AnObject
的子类,没有名称。
它是匿名因为它没有类名声明(例如class Foo
),而且它是内部类,因为它是在另一个类中定义的(似乎没有在提供的代码中显示。)
javac
通常会将这些类命名为带有$
的包含类和一些数字标识符,例如Foobar$1
- 您可能会在找到<EnclosingClass>$1.class
之后找到<EnclosingClass>
编译该代码。
(其中{{1}}是包含匿名内部类的类。)
答案 1 :(得分:4)
这是一个匿名的内部阶级。
代码几乎与:
相同private class Foo extends AnObject {
int count;
public int creation() { return count; }
}
...
AnObject anObject = new Foo();
但是有一些微妙的差异:
final
。答案 2 :(得分:2)
它正在创建一个匿名的内部类。
关于anonoymous内部类,在以下网站上有一些非常有用的教程。 Anonymous Inner class tutorials
答案 3 :(得分:1)
这是班级的定义。它被称为Anonymous Class。
答案 4 :(得分:1)
在这种情况下,花括号用于创建AnObject
的匿名子类。大括号内部是新的字段和方法,作为覆盖超类的方法。对于更简单的抽象类或接口,此模式非常常见,例如“就地”创建侦听器。