匿名课程是个坏主意吗?

时间:2008-11-06 16:23:23

标签: java

使用它们一段时间后,我不禁觉得在使用匿名课程时你被迫跳过的箍是不值得的。

你到处都是final,无论代码哪个代码比你使用一个名字很好的内部类更难阅读。

那么使用它们有什么好处?我一定错过了什么。

5 个答案:

答案 0 :(得分:13)

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

我有an article comparing C# and Java closures,以及为什么它们首先有用,这可能会有所帮助。

答案 1 :(得分:4)

嗯我通常只在需要为一个目的实现接口时使用它(和一个功能很少的接口或代码因为真的很难看)... 如下例所示:

this.addListener(new IListener(){
    public void listen() {...}
});

答案 2 :(得分:1)

我通常将匿名类限制为几行。比5更长的任何东西都会成为一个命名类。

答案 3 :(得分:1)

我建议你this article我觉得很有启发性。

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

答案 4 :(得分:1)

异类可能很有用。但我经常看到的并没有用。许多匿名类太大,降低了可读性。一些专家使用许多相同的匿名类。当使用匿名类是否好的时候没有严格的规则,但有拇指规则:

  1. 大型复杂的课程不应该是匿名的。

  2. 必须保证容器类的可读性。

  3. 干 - 不要重复自己。不要创建两个相同的匿名类。

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

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