“new”表达式中的花括号是什么意思?(例如,“new MyClass() { ... }”)

47

那里的大括号是做什么用的?

handler1 = new Handler() {

        public void handleMessage() {

       }
};

object = new Class_Name() {};这个语法只存在于安卓上还是在Java中也有?在Java中这个语法叫什么?谢谢您的帮助。


相关/重复问题:"new Test()和new Test(){}之间的区别" - blong
3个回答

48
这是创建一个继承自 Handler匿名类 实例的语法。这是 Java 的一部分。

非常感谢。我为此浪费了很多时间:((。 - wanting252

3

当您创建接口的实例引用时,会发生这种情况。例如,我想使用类创建接口Runnable的实例,则可以通过创建匿名类来创建它,并覆盖接口的run()方法。您可以通过查看下面提到的另一个示例来更好地理解。

Runnable runnable = new Runnable() {

    public void run() {
        // TODO Auto-generated method stub

    }
};

0

实例化并返回当前类的匿名子类的引用。

new Handler() {};

在花括号内,可以指定匿名子类的定义(编译器在编译后将其命名为Handler$1)。

这与显式扩展Handler类相等,但显然需要子类的名称规定,因此它不再是匿名的。

以下代码可能有助于理解 实例化并返回当前类的匿名子类的引用。
class Main{
    int a = 5;
    void func(){}
    void meth(){
        Main ref2 = new Main() {
            void func(){
                System.out.println(a);
            }           
        };
        ref2.func();
    }    
    public static void main(String[] args) {
        Main mm = new Main();
        mm.meth();
    }
}
//5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接