2

如果每次我们都必须在调用接口的构造函数时定义一个类,那么使用匿名类有什么帮助。简单地使用泛型类型不是更好吗?

4

4 回答 4

2

GUI 应用程序中经常使用匿名类。当您只需要同时声明和创建一个类的对象时,它可以使代码更加精确。

这是一个例子:

        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
于 2013-04-11T00:30:58.903 回答
1

匿名类不是在每次实例化时都定义的。它们像其他类一样被编译成字节码,名称为MyEnclosingClass$1. 有关更多信息,请参阅这篇文章:Java 中如何编译匿名类?

相切地,反射可用于在运行时使用Class.isAnonymousClass().

于 2013-04-11T00:25:14.250 回答
0

这取决于实际情况; 在某些情况下,使用匿名类会更好,而在其他情况下,使用实现所需接口的具体类会更好。

如果您认为需要重复提供相同的匿名类定义,那么传递实现所需接口的具体类的实例可能会节省您的时间。

Java 语言提供匿名类语法是为了方便。

于 2013-04-11T00:31:08.463 回答
0

为了让您体验一下,这里有一个我自己的经验的简单示例:拥有由函数支持的列表。

一般来说,匿名类(除其他外)有以下用途:

  • 假设您想要一个对象(一个实例,而不是一个类),其行为取决于运行时可用的某个值。如果没有匿名类,您可以通过设置字段(或调用状态更改方法)来做到这一点 - 但您不能执行不同的代码。现在,确实,您可以在类的方法代码中包含一堆switch()语句 - 但这完全将行为的定义与其上下文分离。您可以采用的另一种方法是使用命名子类,但代码量很大,而且它会创建一个您并不真正希望存在的名词。
  • 函数式编程!在 Java 8 出现之前,匿名函数几乎是您可以传递函数的唯一方式,这些函数在 Java中不是一等公民。有了这些,您可以执行许多简洁优雅的技巧,例如我上面的示例。
于 2013-04-11T15:32:50.500 回答