这个语法叫什么? `new Type(){...}`

时间:2011-11-23 09:37:44

标签: java

我知道Java会在初始化类变量时让你用变量的类型做诡计。沿着:

SomeType foo = new SomeType() {
    {
        this.fooField = 12345;
    }
    @Override public void someMethod() {
        throw new ReallyWeirdException();
    }
};

将创建一个实例变量foo,其中someMethod()具有与通常SomeType不同的语义,并且fooField初始化为其正常默认值以外的值

但是new Type() { ... }语法叫做什么?

7 个答案:

答案 0 :(得分:3)

匿名内心阶层。

在代码(内部)中定义一个没有名称(匿名)但继承自SomeType的类(类),然后覆盖它的一些方法和属性。

答案 1 :(得分:2)

它被称为匿名类声明,请参阅the spec

答案 2 :(得分:2)

你有

  1. 匿名类(new SomeType() { ... })和
  2. 初始化程序块(适用于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设置为新值)