gpt4 book ai didi

java - 变量声明 - 尽可能使用修饰符 'final'。是的,类和方法是怎么回事?

转载 作者:行者123 更新时间:2023-11-30 06:25:34 24 4
gpt4 key购买 nike

我正在完成一个项目,其中有 100-150 个类和……噗……很多很多方法。对于开发,我从一开始就使用了“尽可能使用修饰符‘final’”保存操作。但这让我的方法(以及我手动创建而不是使用助手创建的类)没有他们应得的最终/抽象关键字。真的,我不想通过每个类和方法声明来手动完成它们。我确定有一种方法可以告诉 eclipse '以最严格的方式为我做这件事(即,如果一个类从未实例化,则将其设置为抽象类,否则,如果从未扩展,则将其设置为最终类,否则什么都没有,以及类似的东西 - 显然没有抽象部分 - 用于方法)。

我说的对吗?如果是这样,那是哪条路?

最佳答案

执行您的启发式方法可能会有问题。这可能是 eclipse 没有实现它们的原因。

将代码中未扩展的所有类设置为 final - IDE 如何知道它们是否打算扩展到其他地方?仅当您确实打算禁止扩展时,才将它们设置为 final

abstract 也是如此 - IDE 无法知道您是在编写一个框架,还是只是一个领域模型 .jar,那里从来没有将是任何初始化。自动使实体抽象可能会在以后搬起石头砸你的脚。

变量很少出现这种情况,因此这个启发式 eclipse 可以做到。

编辑我想我必须详细说明我的推理。

添加 final 修饰符对变量没有问题,因为它们大部分是本地化的——它们在您控制的代码范围内。很少有可修改的变量对第 3 方代码可见并且无需调用方法即可修改。

如果变量上的 final 修饰符过多,它的影响将仅限于您的代码,您可能会很快注意到它。所以最坏的情况是您将不得不打开文件并删除修饰符。

类的情况有所不同——其中许多是公共(public)的,因此可供第 3 方代码访问。如果您将代码中所有未实例化的类都声明为 abstract,您将有效地禁止其他人实例化它——而这一次您甚至不会知道。所以这里最坏的情况是其他人将无法使用您的代码。这就是为什么我不会将其自动化 - 大多数时候您会希望第 3 方代码能够实例化您定义的类。

然而,关于何时使类 final 有一个启发式方法 - 当一个类只有静态方法时。 PMD 和 Checkstyle 等一些工具知道这一点,并且会告诉您。这个选项实际上很适合 eclipse,但不幸的是没有实现。

至于默认让 classees final - andersoj 和许多其他人坚持“为继承而设计或禁止它”的原则 - 我认为这是由 Joshua Bloch 在他的“Effective Java”一书中介绍的.其他人则认为,默认“密封”所有类将违反开闭原则。我倾向于后者。

关于java - 变量声明 - 尽可能使用修饰符 'final'。是的,类和方法是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com