【问题标题】: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
}
};