新对象{}有什么作用?

gsi*_*011 1 java constructor subclass

很难搜索到这方面的信息,因为我不知道它叫什么,所以这是我猜的第一个问题.

是否使用此表示法:

new Object() {//code here}
Run Code Online (Sandbox Code Playgroud)

创建一个Object类型的新对象或创建一个对象的子类的新对象?如果它是一个子类,你可以把你可以用来声明一个类(成员变量,函数,内部类)的所有内容放在大括号内吗?你能为它写一个构造函数吗?

Rei*_*ica 6

这称为匿名类.基本上,您正在定义一个子类.

这个电话:

Object a = new Object() {
   // stuff
};
Run Code Online (Sandbox Code Playgroud)

..定义了一个新的Object子类//stuff(就像在普通中声明一样)A extends Object.

维基百科也有一篇关于它们的好文章.

它们主要用于闭包,这意味着匿名类中定义的函数可以访问final封闭范围中的变量.

例如肥胖型:

interface Function {
    void run();
}

static void example(Function f) {
    f.run();
}

void runExample() {
    final int a = 10;
    example(new Function() {
        void run() {
            // Notice that "a" was defined in the outer scope
            System.out.println(a);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)