是否可以在不同的包中重复使用常量?

时间:2018-06-14 12:31:34

标签: java

如果这不是提出这个问题的正确位置,请道歉。我还检查了thisthis等相关问题,但这并不完全相同。

问题很简单,让我们说我们的应用程序中有一个常量定义如下:

public static final String CONSTANT_NAME = "My Constant";

在不同的包中,我们也需要相同的常量。是否可以接受(也就是良好做法)重用现有的或者我们应该创建一个新的(如果适用,然后将其声明为私有/受保护)?

我说的是应用程序中使用的常量,例如从集合中检索的键名,而不是国际化常量。

提前致谢。

2 个答案:

答案 0 :(得分:2)

答案将高度依赖于背景。您需要考虑以下事项:

  • 这些常数在你声明它们的不同地方是否意味着同样的事情?

  • 共享常量是否是通用API的一部分?或者他们是否打算在许多相关API中提供一定程度的统一性?

  • 是否存在模块化问题?是否在多个包(或Java 9+模块)中公开常量会导致不合需要的 1 耦合?

你应该权衡竞争因素/关注点并得出你自己的结论。如果您有理由对您的选择感到后悔,请不要过于害怕修改/重构 2

1 - 并非所有耦合都很糟糕。耦合和其他事情之间存在张力......就像代码重用一样。

2 - 模拟重构可能对重要API ......以及其他人的代码产生的潜在影响。

答案 1 :(得分:-4)

不定义常量并在不同的包中使用是不可接受的。因为它违反了松耦合原理。 如果您想将类或包移动到另一个项目,那么由于这种紧密耦合,您还应该移动常量驻留包。