使用它们一段时间后,我不禁觉得在使用匿名课程时你被迫跳过的箍是不值得的。
你到处都是final
,无论代码哪个代码比你使用一个名字很好的内部类更难阅读。
那么使用它们有什么好处?我一定错过了什么。
答案 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)
异类可能很有用。但我经常看到的并没有用。许多匿名类太大,降低了可读性。一些专家使用许多相同的匿名类。当使用匿名类是否好的时候没有严格的规则,但有拇指规则:
大型复杂的课程不应该是匿名的。
必须保证容器类的可读性。
干 - 不要重复自己。不要创建两个相同的匿名类。
如果您有许多不相同但相似的匿名类,那么您应该确定可以重用的这些类的部分。尝试使用模板方法模式。
对于代码和软件的质量来说,减少冗余非常重要。 “复制和粘贴”是编程中的反模式,因为原始代码片段可能包含错误。如果有人复制了那段代码,那么他就会复制该错误。十周后,其他人发现了错误并修复了它,但另一个错误仍在代码中,需要额外的十周才能找到并修复它。 W