【发布时间】:2016-04-11 19:19:03
【问题描述】:
在 Java 中在哪里定义常量的问题已经在论坛中多次出现,但我正在努力寻找一个我觉得舒服的解决方案。
为简单起见,假设我有两个类:WriteMyData 和 ReadMyData。 None 是另一个的子类。这两个类共享两个对其操作至关重要的常量:String DELIMITER 和 int LENGTH。将来我可能想更改这些常量的值,以便在适当的地方定义它们。
共识似乎经常支持enum 类型。但是,就我而言,没有什么可以枚举,所以我的enum 中只有一项我称之为DEFAULT:
public enum DataSettings {
DEFAULT(",", 32);
private final String delimiter;
private final int length;
DataSettings(String delmiter, int length) {
this.delimiter = delimiter;
this.length = length;
}
public String getDelimiter() { return delimiter; }
public int getLength() { return length; }
}
因此,在我的两个类中,我都通过DataSettings.DEFAULT.getDelimiter() 和DataSettings.DEFAULT.getLength() 访问常量。
这真的是很好的OO风格吗?使用enum 是不是有点矫枉过正?如果我不使用enum,我应该怎么做?为常量创建接口似乎不受欢迎,而且似乎没有自然的超类可供我的类派生。 enum 中只有一个 default 项是初学者的错误吗?
【问题讨论】:
-
如果没有可枚举的内容——即只有一个数据设置——只需将其设为一个静态类,并将其定界符和长度作为公共静态最终变量
-
这两个变量是否指向相同的值?你想在一个地方声明常量吗?
-
理想情况下,应该有一个额外的类,它的所有变量都为
public static final。 -
类的名称表明它们可以更好地建模为一个具有
read和write方法的类,这将解决您在这种特殊情况下的困境。 -
@fishinear 我确实玩过这个想法,但出于这个问题的目的,忽略实际的类并将它们视为不相关的,只是它们共享几个常量。