这是一个好主意,在Constants
类容器中的类中对常量进行分组,如
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
。
答案 0 :(得分:9)
我通常更喜欢将常量放在它们所属的类中。例如,文件常量可以在FileManager
(或类似的东西)中使用它们。连接常量可以在DBUtil
类中,使用它们。
想想JDK。它有一个巨大的常量类吗?不是。{和BorderLayout
使用的常量在类BorderLayout
中。 (和JOptionPane
使用的常量位于JOptionPane
。
答案 1 :(得分:2)
优点:
缺点:
总之,当你为自己编写一些小应用程序时,它可能会很方便。一般来说,这不是一个好习惯。
答案 2 :(得分:1)
使用枚举http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
每个JVM只有一个枚举对象副本
答案 3 :(得分:1)
您始终可以使用foo.bar.baz
表示法在类路径中使用.properties文件。这样可以更轻松地更改值而无需重新编译。 Spring框架提供了实用程序来帮助动态刷新值。
但是,我同意 @JB Nizet 和 @yair ,与最常关联的类保持一致是一个更好的主意。
答案 4 :(得分:-3)
您也可以将abstract
用于常量类,甚至比私有构造函数更好。如果使用接口,它可以在类层次结构之外使用,并且可以使用implements
但是隐藏原点(接口名称)。
但有一个问题。如果仅为常量导入类,编译器可能会删除.class中的导入并填充常量本身。如果稍后更改常量的值,则using类将不会自动重新编译,并保持旧值。