【问题标题】:How is an anonymous class helpful in Java?匿名类在 Java 中有何帮助?
【发布时间】:2013-04-11 00:19:39
【问题描述】:

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

【问题讨论】:

    标签: java generics anonymous-class


    【解决方案1】:

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

    这是一个例子:

            btn.setOnAction(new EventHandler<ActionEvent>() {
    
                @Override
                public void handle(ActionEvent event) {
                    System.out.println("Hello World!");
                }
            });
    

    【讨论】:

      【解决方案2】:

      匿名类不是在每次实例化时都定义的。它们像其他类一样被编译成字节码,名称例如MyEnclosingClass$1。有关更多信息,请参阅此帖子:How are anonymous classes compiled in Java?

      切线,反射可用于在运行时使用Class.isAnonymousClass() 识别它们。

      【讨论】:

      • 嗯,也许我误解了这个问题。
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        为了让您体验一下,这里有一个快速的example,来自我自己的经验:拥有由函数支持的列表。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-13
          相关资源
          最近更新 更多