【问题标题】:Curly braces in "new" expression? (e.g. "new MyClass() { ... }")“新”表达式中的花括号? (例如“new MyClass() { ... }”)
【发布时间】:2012-05-15 04:15:18
【问题描述】:

花括号在那里做什么?

handler1 = new Handler() {

        public void handleMessage() {

       }
};

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

【问题讨论】:

标签: java android class syntax curly-braces


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    Runnable runnable = new Runnable() {
    
        public void run() {
            // TODO Auto-generated method stub
    
        }
    };
    

    【讨论】:

      【解决方案3】:

      这是创建扩展Handleranonymous class 实例的语法。这是 Java 的一部分。

      【讨论】:

      • 非常感谢。我为此浪费了很多时间:((。
      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2023-03-06
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多