如何在Java中实现常量

How to implement Constants in Java

本问题已经有最佳答案,请猛点这里访问。

Constants类容器内的类中的常量分组,像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public final class Constants {
  public final class File {
    public static final int MIN_ROWS = 1;
    public static final int MAX_ROWS = 1000;

    private File() {}
  }

  public final class DB {
    public static final String name ="oups";

    public final class Connection() {
      public static final String URL ="jdbc:tra-ta-ta";
      public static final String USER ="testUser";
      public static final String PASSWORD ="testPassword";

      private Connection() {}
    }

    private DB() {}
  }

  private Constants() {}
}

它允许使用Constants.DB.Connection.URL而不是DbConnectionConstants.URL


我通常喜欢把常数在哪里他们属于类。例如,文件可以在FileManager常数(或什么),他们都在使用。连接DBUtil常数可以在你的类,他们都在使用。

想想JDK。是有一个gigantic常数级的?NO的常数。由(和使用)在BorderLayoutBorderLayout是一流的。使用的常量(和一个由一JOptionPaneJOptionPane)。


优点:

  • 你得到一个很好的"路径"的常数。
  • 你会得到一个跨编码常数会议,如果colleages跟随指导。
  • 缺陷:

  • 有许多许多的"域"(常数常数,这类可能太麻烦的一个句柄。
  • 它不是直观的。它让我想起了更多的蚂蚁比Java属性的常数。
  • 它modularization防止您的代码。你说你想单独的数据库连接文件处理包和包是由不同的瓶可能是使用不同的应用程序。它提供的冗余管理JAR文件处理一个常数dB。你可以有很多的模块可以很容易地搜索。
  • 在的结论,它的东西,可能只是一些小的手机,当你写你自己的自我应用研究。通常,它不是一个好的做法。


    你可以使用一.properties foo.bar.bazclasspath文件中使用的符号。这将使它更容易recompiling值没有改变。Spring框架提供的工具,以帮助刷新值对飞。

    然而,我同意,"Nizet和JB"是这一类的保鲜与最相关的常数是一个更好的主意。


    使用枚举docs.oracle.com http://////javaoo JavaSE教程Java / enum.html

    每个JVM都只有一个副本的枚举对象


    你可以使用abstract为常数级太,甚至比在私有构造函数。如果你使用的界面会在外面和一个层次重复使用类可以简单的使用implements虽然隐藏的起源(接口名称)。

    一个问题,虽然。如果你只有一个常数A类进出口,编译器可以把导入的类和在填充在常数本身。如果一个变化的时间常数的值,使用类不会自动recompile和保持旧的价值。