强制执行您的启发式方法可能会有问题。这可能是eclipse没有实现它们的原因。
将所有未在代码中扩展的类设置为final
- IDE 如何知道它们是否打算在其他地方扩展?final
仅当您确实打算禁止扩展时才制作它们。
这同样适用abstract
- IDE 无法知道您是在编写一个框架,还是只是一个域模型.jar
,其中永远不会有任何初始化。自动制作实体abstract
可能会在以后击中你的脚。
变量很少出现这种情况,因此这种启发式 Eclipse 可以做到。
编辑我想我必须详细说明我的推理。
添加final
修饰符对变量没有问题,因为它们大多是本地化的——它们存在于您控制的代码范围内。很少有可修改的变量对 3rd 方代码可见,并且可以在不调用方法的情况下进行修改。
如果final
变量上的修饰符过多,它的影响将仅限于您的代码,您可能会很快注意到它。所以最坏的情况是你必须打开文件并删除修改器。
类的情况有所不同——其中许多是公共的,因此可以被 3rd 方代码访问。如果您将所有未在代码中实例化的类声明为abstract
,您将有效地禁止其他人实例化它——这一次您甚至都不知道。所以这里最糟糕的情况是其他人将无法使用您的代码。这就是我不会自动化它的原因——大多数时候,您希望 3rd 方代码能够实例化您定义的类。
final
然而,当一个类只有静态方法时,有一个关于何时创建类的启发式方法。一些工具,如 PMD 和 Checkstyle 知道这一点,并会告诉你。这个选项实际上很适合 eclipse,但不幸的是没有实现。
至于final
默认设置类对象——andersoj 和许多其他人坚持“为继承而设计或禁止它”的原则——我认为它是由 Joshua Bloch 在他的“Effective Java”一书中介绍的。其他人则认为,默认情况下“密封”所有类将违反开放封闭原则。我倾向于后者。