我一直在寻找一个离岸小组开发的代码。我看到每个模块至少定义了一个“常量接口”。 示例(不是现实世界):
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
?
答案 0 :(得分:6)
我更喜欢将常量放在他们认为最相关的类中,然后如果我 在其他地方引用它们,就这样做 - 可能如果有意义的话,使用静态导入(例如Math.PI
)。
将常量放在接口中的唯一真正原因是允许您“实现”无方法接口,并通过简单的名称访问常量,而无需进一步限定。静态导入消除了这个原因。
答案 1 :(得分:1)
En enum可能不是一个好主意,除非所有参数都密切相关。在你的例子中有两个参数,我会说它们与枚举的资格不够密切相关。
但是包含这样的常量类/接口并不一定是坏主意。它确实具有集中化的优势,这意味着这些配置可以轻松地移出程序之外 - 例如移动到属性文件,命令行解码器,数据库甚至套接字接口 - 对其影响最小其他课程。这真的是设计将采取什么方向的问题。
然而,除非您考虑沿着这条路走下去,否则我会说使用相应参数的类中的静态决赛是可行的方法,正如已经建议的那样。
答案 2 :(得分:0)
将界面变为final
类,其中包含private
构造函数。
答案 3 :(得分:0)
使用final不可实例化的类,即具有私有构造函数的类。