【发布时间】:2014-10-05 19:58:23
【问题描述】:
检查这个例子:
public interface IConstants {
public enum Levels {
LOW("30 points"), MEDIUM("50 points")
};
public enum Cars {
PORSCHE("250 km/h"), FORD("180 km/h")
}
}
我想要一个这样的界面,因为我想以这种方式访问我的枚举:
String level = IConstants.Levels.MEDIUM;
String car = IConstants.Cars.PORSCHE;
编译器显示此消息:
构造函数 IConstants.“枚举名称”未定义。
这样解决了:
public class Constants {
public static class Levels {
public static String LOW = "30 points";
public static String MEDIUM = "50 points";
};
//... other classes
}
-在(我的情况)我的常量中有一个“树”对我很有用,每个常量都以关键字常量开始,然后是子类别,然后是值 -> Constants.Levels.LOW。
//如果这是非常糟糕的做法,请批评它,我同意所有 cmets
- 另一件可能是好事,一个类中会有所有常量
【问题讨论】:
-
这是Constant Interface Antipattern。不要这样做。
-
好的,所以我应该在类而不是接口中声明我的所有常量?公共最终类常量 {...} ??
-
为什么要将
enum声明为嵌套类?你有什么收获? -
Levels.MEDIUM有什么问题?我不确定您是否了解自己想要什么或想要实现什么。请先阅读the Oracle tutorial onenum。 -
懒惰绝不是糟糕的编程实践的借口。当然应该很明显,很多人和你的想法完全相同,然后 Java 社区的大多数人认为成本超过了收益。从别人的错误中吸取教训,否则你注定要重蹈覆辙。