Java 匿名课程是个坏主意吗?

Java 匿名课程是个坏主意吗?,java,Java,在使用了一段时间之后,我忍不住觉得,当使用匿名类时,你被迫跳出的圈套是不值得的 你最终得到的final到处都是,无论代码是什么,都比使用一个命名良好的内部类更难阅读 那么使用它们有什么好处呢?我肯定遗漏了什么。我通常将匿名类限制在几行以内。任何长度超过(例如5)的项都可以创建一个命名类 优点是它是闭包的实现。它很笨重,但它是目前Java中最好的。换句话说,您不必仅仅为了保存某些状态而创建一个新类,而这些状态已经作为局部变量存在 我有,以及为什么它们首先有用,这可能会有所帮助。我通常只在需要实现单

在使用了一段时间之后,我忍不住觉得,当使用匿名类时,你被迫跳出的圈套是不值得的

你最终得到的
final
到处都是,无论代码是什么,都比使用一个命名良好的内部类更难阅读


那么使用它们有什么好处呢?我肯定遗漏了什么。

我通常将匿名类限制在几行以内。任何长度超过(例如5)的项都可以创建一个命名类

优点是它是闭包的实现。它很笨重,但它是目前Java中最好的。换句话说,您不必仅仅为了保存某些状态而创建一个新类,而这些状态已经作为局部变量存在


我有,以及为什么它们首先有用,这可能会有所帮助。

我通常只在需要实现单一用途的接口时使用它(以及一个功能或代码很少的接口,因为非常快)。。。 如以下示例所示:

this.addListener(new IListener(){
    public void listen() {...}
});
我向你推荐我觉得很有启发性


您说,final关键字到处都是,但是对于本地类,您仍然必须传递封闭类的状态,这也可能不利于可读性。

任意类都可能有用。但我经常看到的并没有什么用处。很多匿名类太大,降低了可读性。一些专家使用许多相同的匿名类。无论是否使用匿名类,都没有严格的规则,但有一些经验规则:

  • 大型复杂类不应该是匿名的

  • 必须保证容器类的可读性

  • 干燥-不要重复你自己。不要创建两个相同的匿名类

  • 如果您有很多不相同但相似的匿名类,那么您应该确定这些类中可以重用的部分。尝试使用模板方法模式


  • 减少冗余对代码和软件的质量很重要。“复制和粘贴”是编程中的反模式,因为原始代码段可能包含bug。如果有人复制了那段代码,那么他就会复制错误。十周后,其他人发现了这个bug并修复了它,但另一个bug仍然在代码中,需要额外的十周才能找到并修复它。W

    我的印象是,Java的匿名内部类在其环境中没有关闭,但没有引用或示例来支持我自己。它们有,但您可以从外部范围访问的变量只有那些声明为final的变量。我也不确定这一点。如果我理解闭包,您可以传递对闭包的引用,它保留对创建闭包的封闭范围的绑定变量的引用。我认为Java中的匿名类中缺少了这一点,它基本上是假的闭包。它将值复制到新类中。考虑到您只具有只读访问权限,并且变量是最终的,因此它相当接近闭包。它是环境的一个副本,而不是环境本身,但这通常已经足够接近了。先生,这仍然是最佳实践吗?或者至少是一个静态嵌套类