什么是恒定接口最优雅的替代品?

时间:2011-09-15 19:47:06

标签: java constants

我一直在寻找一个离岸小组开发的代码。我看到每个模块至少定义了一个“常量接口”。 示例(不是现实世界):

public interface RequestConstants{
  //a mix of different constants(int,string,...)
  public static final int MAX_REQUESTS = 9999;
  public static final String SAMPLE_REQUEST = "Sample Request";
}

根据我的理解,它是一种反模式,因为它们在运行时没有任何实用性,应该以不同的方式避免或解决。 什么是优雅的方式来代表这个?是否可以使用enums

4 个答案:

答案 0 :(得分:6)

我更喜欢将常量放在他们认为最相关的类中,然后如果我 在其他地方引用它们,就这样做 - 可能如果有意义的话,使用静态导入(例如Math.PI)。

将常量放在接口中的唯一真正原因是允许您“实现”无方法接口,并通过简单的名称访问常量,而无需进一步限定。静态导入消除了这个原因。

答案 1 :(得分:1)

En enum可能不是一个好主意,除非所有参数都密切相关。在你的例子中有两个参数,我会说它们与枚举的资格不够密切相关。

但是包含这样的常量类/接口并不一定是坏主意。它确实具有集中化的优势,这意味着这些配置可以轻松地移出程序之外 - 例如移动到属性文件,命令行解码器,数据库甚至套接字接口 - 对其影响最小其他课程。这真的是设计将采取什么方向的问题。

然而,除非您考虑沿着这条路走下去,否则我会说使用相应参数的类中的静态决赛是可行的方法,正如已经建议的那样。

答案 2 :(得分:0)

将界面变为final类,其中包含private构造函数。

答案 3 :(得分:0)

使用final不可实例化的类,即具有私有构造函数的类。