虽然我经常遇到,但我不理解这种编写代码的方式:
Runnable r=new Runnable() {//<----- (braces start here?)
public void run() {
System.out.println("Hello");
}
}; // ?这是什么?请解释清楚。
发布于 2011-03-31 21:57:34
这是一个匿名内部类。它正在使用大括号中的代码创建Runnable接口的实现。除了实现接口之外,您还可以扩展其他类。好的方面是,您可以在不显式创建单独的类的情况下做到这一点,并且还可以在匿名内部类的主体中引用final局部变量(包括参数)。
有关更多详细信息,请参阅Java tutorial,或者只需搜索“匿名内部类”即可获得大量相关页面。
发布于 2011-03-31 22:01:38
正如其他人所提到的,这里创建的是一个匿名内部类。具体地说,编写代码的人说:
运行而不是Runnable类的实例,我想创建一个覆盖“
()”方法的子类,并创建它的一个实例。不值得我花时间去创建一个命名的子类,因为我只打算创建这个实例。相反,只需覆盖该方法并返回我需要的子类实例。
发布于 2011-03-31 22:02:01
这是一个anonymous class声明--基本上就是一个实现Runnable接口的类,作为一个匿名嵌套类进行声明和实例化。
注意,你也可以用同样的方式声明匿名子类:
Object o = new Object(){
public String toString(){ return "boo!" };
}还要注意,您可以在匿名类代码中使用封闭方法的变量,但前提是变量为final (因为匿名类实际上获得了变量的副本)。
https://stackoverflow.com/questions/5500998
复制相似问题