如果这不是提出这个问题的正确位置,请道歉。我还检查了this或this等相关问题,但这并不完全相同。
问题很简单,让我们说我们的应用程序中有一个常量定义如下:
public static final String CONSTANT_NAME = "My Constant";
在不同的包中,我们也需要相同的常量。是否可以接受(也就是良好做法)重用现有的或者我们应该创建一个新的(如果适用,然后将其声明为私有/受保护)?
我说的是应用程序中使用的常量,例如从集合中检索的键名,而不是国际化常量。
提前致谢。
答案 0 :(得分:2)
答案将高度依赖于背景。您需要考虑以下事项:
这些常数在你声明它们的不同地方是否意味着同样的事情?
共享常量是否是通用API的一部分?或者他们是否打算在许多相关API中提供一定程度的统一性?
是否存在模块化问题?是否在多个包(或Java 9+模块)中公开常量会导致不合需要的 1 耦合?
你应该权衡竞争因素/关注点并得出你自己的结论。如果您有理由对您的选择感到后悔,请不要过于害怕修改/重构 2 。
1 - 并非所有耦合都很糟糕。耦合和其他事情之间存在张力......就像代码重用一样。
2 - 模拟重构可能对重要API ......以及其他人的代码产生的潜在影响。
答案 1 :(得分:-4)
不定义常量并在不同的包中使用是不可接受的。因为它违反了松耦合原理。 如果您想将类或包移动到另一个项目,那么由于这种紧密耦合,您还应该移动常量驻留包。