在Java中实现常量的最佳方式是什么?

  • 回答 (2)
  • 关注 (0)
  • 查看 (227)

我见过这样的例子:

public class MaxSeconds {
   public static final int MAX_SECONDS = 25;
}

假设我可以有一个常量类包装常量,声明它们是静态的。我几乎完全不知道Java,所以想知道这是否是创建常量的最佳方法。

嗝屁嗝屁提问于
以往V回答于

我强烈建议不要有一个常量类。当时这似乎是一个好主意,但是当开发者拒绝记录常量,并且类增长到包含500个以上的所有不相关的常量(涉及应用程序的完全不同的方面)时,这一般变成常量文件是完全不可读的。代替:

  • 如果您有权访问Java 5+,请使用枚举为应用程序区域定义特定的常量。应用领域的所有部分都应该参考这些常量的枚举,而不是常数值。你可以声明一个类似于你声明一个类的枚举。枚举可能是Java 5+中最有用的特性(也可能是唯一的)。
  • 如果你的常量只对一个特定的类或者它的一个子类有效,把它们声明为protected或者public,然后把它们放在层次结构的顶层类中。这样,子类可以访问这些常量值(如果其他类通过公共访问它们,常量不仅对于特定的类是有效的...这意味着使用这个常量的外部类可能与包含常量的类)
  • 如果你有一个定义了行为的接口,但是返回值或参数值应该是特定的,那么在接口上定义常量是完全可以接受的,以便其他的实现者可以访问它们。但是,避免为了保持常量而创建一个接口:它可以变得和为了保持常量而创建的类一样糟糕。
akjok54stay hungry stay foolish回答于

这是完全可以接受的,甚至可能是标准。

(public/private) static final TYPE NAME = VALUE;

TYPE类型NAME是哪里,是所有大写字母中带下划线的名字,并且VALUE是常数值;

我强烈建议不要把你的常量放在自己的类或接口中。

作为一个方面说明:变量声明最终的,可变的仍然可以改变; 但是,变量永远不能指向不同的对象。

例如:

public static final Point ORIGIN = new Point(0,0);
public static void main(String[] args){
    ORIGIN.x = 3;
}

这是合法的,ORIGIN然后是(3,0)的一个点。

扫码关注云+社区

领取腾讯云代金券