在整个申请过程中,您在哪里使用Constants?

Jam*_*sev 20 java coding-style interface

接口是一个可以存储我的接受的地方

public static final Foo bar
Run Code Online (Sandbox Code Playgroud)

你是否推断它们是从程序外读取的?你为它组成一个超级班吗?

当情况出现时,你是如何做到的?

Mic*_*rdt 33

我将每个常量放入与它最密切相关的类或接口中(例如,因为它将通过其方法使用).

一个非常诱人但最终非常愚蠢的想法是拥有一个包含应用程序中使用的所有常量的"常量类"(或接口).这看起来很"整洁",但是对于可维护性并不好,因为你想通过它们实现的功能来分组,而不是像常量这样的技术细节(你会把所有接口都放到一个专用的包中吗?所有的抽象类?) .

这个想法也是愚蠢的,因为对那个类/接口的任何改变(因为常量内联)需要重建所有使用任何常量的类 - 即几乎整个应用程序.因此,应用程序越大,您需要更频繁地进行完全重建,并且需要的时间越长.我参与了这样一个项目,这个问题导致每个开发人员每隔一天停顿15分钟......

  • @Rand:任何常量都有某种意义,它应该是与该含义相关的类的一部分并相应地命名.即使在整个代码中使用常量但总是与一个类相关,它应该显然是该类的一部分(例如BorderLayout.CENTER).如果你不能将它固定在一个特定的类上,那么专门为它设置一个类或接口是可以的,但它应该特定于域概念或子系统,而不是常量的常规转储 - 例如SwingConstants. (4认同)
  • 我同意,如果常量仅在一个类中使用,那么最好将其直接放入该类中。但是整个代码中使用的常量又如何呢?我个人发现拥有一个全局常量类对此很有用,使用静态导入更是如此 (2认同)
  • 我刚刚删除了包含所有公共静态最终常量的“公共接口常量”。 (2认同)

Abd*_*aly 5

如果你在谈论一个简单的应用程序,那么Constants类方法很好:

public class Constants {
    private Constants() {} // no way to instantiate this class
    public static final String MY_VAL = "123";
}
Run Code Online (Sandbox Code Playgroud)

如果您正在构建一个更大的应用程序,您应该使用依赖注入,请查看如何将属性值注入使用注释配置的Spring Bean?