44

花括号在那里做什么?

handler1 = new Handler() {

        public void handleMessage() {

       }
};

object = new Class_Name() {};? 这种语法也只存在于 Android 或 Java 上?它在 Java 中叫什么?感谢您的帮助。

4

3 回答 3

44

这是创建扩展的匿名类Handler实例的语法。这是Java的一部分。

于 2012-05-06T07:03:17.787 回答
3

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

Runnable runnable = new Runnable() {

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

    }
};
于 2012-05-06T07:25:25.247 回答
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
于 2020-10-04T11:46:59.833 回答