Java 跨包的常量

Java Constants across packages

我有一个项目包含 Java 中的 5 个不同的包。它们都包含 classes,它们具有幻数和硬编码字符串,我正在寻找为其创建常量。我想知道什么是最佳实践。我是否应该为所有 classes 可以导入的程序中的所有常量创建一个 Constants class?还是将常量拆分成多个更小的文件会更有效?

关于最佳实践,请参阅 Principle of Least Privilege

您应该提取内联硬编码常量,但您应该将所有常量放入一个整体class。相反,将常量拆分为上下文适当的 classes ("multiple smaller files"),并将这些 classes 仅保留在需要正确引用的包级别。

如果该值仅适用于一个特定的 class(又名 private static final),则无需将此值从 class 中移除。如果只在一个地方引用它,将它保存在别处只会增加工作量。

如果值像全局变量一样或需要在许多不同的 classes(又名 public static final)中访问,将相关值提取到单独的 class 中是有意义的,但是可能是您应该调查的代码味道。

由于您使用的是包,请考虑使用 package-private (static final) 将您的配置值隔离到需要它的单个包中。

考虑使用 configuration/properties 文件来注入值,而不是在 class 中明确地硬编码它们。根据您的需要,您可以使用简单的 Java 属性,或者有许多 libraries/frameworks 可以帮助您处理属性,例如 Spring