我知道Java会在初始化类变量时让你用变量的类型做诡计。沿着:
SomeType foo = new SomeType() {
{
this.fooField = 12345;
}
@Override public void someMethod() {
throw new ReallyWeirdException();
}
};
将创建一个实例变量foo
,其中someMethod()
具有与通常SomeType
不同的语义,并且fooField
初始化为其正常默认值以外的值
但是new Type() { ... }
语法叫做什么?
答案 0 :(得分:3)
匿名内心阶层。
在代码(内部)中定义一个没有名称(匿名)但继承自SomeType的类(类),然后覆盖它的一些方法和属性。
答案 1 :(得分:2)
它被称为匿名类声明,请参阅the spec。
答案 2 :(得分:2)
你有
new SomeType() { ... }
)和fooField
)。答案 3 :(得分:2)
我认为您正在寻找的术语是anonymous classes。
答案 4 :(得分:2)
匿名内心阶级。
new SuperType(construction parameters) {
inner class methods and data
}
这里,SuperType可以是一个接口,例如ActionListener;然后,内部类实现该接口。或者SuperType可以是一个类;然后,内部类扩展了该类。
匿名内部类不能有构造函数,因为构造函数的名称必须与类的名称相同,并且该类没有名称。相反,构造参数被赋予超类构造函数。特别是,只要内部类实现接口,它就不能具有任何构造参数。不过,您必须提供一组括号,如
new InterfaceType () { methods and data }
答案 5 :(得分:0)
答案 6 :(得分:0)
我称之为匿名(子)类。
请注意,您在这里做了两件事 - 在匿名子类中覆盖someMethod,还添加了一个实例初始化器(将fooField设置为新值)