【发布时间】:2013-04-11 00:19:39
【问题描述】:
如果每次我们都必须在调用接口的构造函数时定义一个类,那么使用匿名类有什么帮助呢?简单地使用泛型类型不是更好吗?
【问题讨论】:
标签: java generics anonymous-class
如果每次我们都必须在调用接口的构造函数时定义一个类,那么使用匿名类有什么帮助呢?简单地使用泛型类型不是更好吗?
【问题讨论】:
标签: java generics anonymous-class
匿名类在 GUI 应用程序中经常使用。当您只需要同时声明和创建一个类的对象时,它可以使代码更加精确。
这是一个例子:
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
【讨论】:
匿名类不是在每次实例化时都定义的。它们像其他类一样被编译成字节码,名称例如MyEnclosingClass$1。有关更多信息,请参阅此帖子:How are anonymous classes compiled in Java?
切线,反射可用于在运行时使用Class.isAnonymousClass() 识别它们。
【讨论】:
视情况而定;在某些情况下,使用匿名类会更好,而在其他情况下,使用实现所需接口的具体类会更好。
如果您认为需要重复提供相同的匿名类定义,那么传递实现所需接口的具体类的实例可能会节省您的时间。
Java 语言提供匿名类语法是为了方便。
【讨论】:
为了让您体验一下,这里有一个快速的example,来自我自己的经验:拥有由函数支持的列表。
一般来说,匿名类有(除其他外)以下用途:
switch() 语句——但这完全将行为的定义与其上下文分离。您可以采用的另一种方法是使用命名子类,但这会产生很多代码,并且会创建一个您并不真正希望存在的名词。【讨论】: