【发布时间】:2016-06-23 12:34:13
【问题描述】:
我知道 java 中的枚举以及它们是如何不可继承且是最终的等等。我一直在寻找这个,但我仍然无法找到我想要实现的替代方案。这是通用代码,尽可能简化:
类实用程序
public abstract class Utility {
public Utility() {
}
public abstract void run() throws Exception;
}
类 MyUtility1
public class MyUtility1 extends Utility {
public MyUtility1() {
}
@Override
public void run() throws Exception {
//do something
}
}
类 MyUtility2
public class MyUtility2 extends Utility {
public MyUtility2() {
}
@Override
public void run() throws Exception {
//do something
}
}
类主要
public class Main {
public static void main(String args[]) {
try {
Utility ut = null;
if(/* something here */) {
ut = new MyUtility1();
} else {
ut = new MyUtility2();
}
ut.run();
} catch(MissingPropertyException e) {}
}
}
现在我需要在 MyUtility1 和 MyUtility2 上有一组不同的常量。我会为此使用枚举:
类 MyUtility1
public class MyUtility1 extends Utility {
public enum Properties {
MONDAY("Monday"),
TUESDAY("Tuesday");
String property;
Properties(String prop) {
property = prop;
}
}
public MyUtility1() {
}
@Override
public void run() throws Exception {
//do something
}
}
类 MyUtility2
public class MyUtility2 extends Utility {
public enum Properties {
JANUARY("January"),
FEBRUARY("February");
String property;
Properties(String prop) {
property = prop;
}
}
public MyUtility2() {
}
@Override
public void run() throws Exception {
//do something
}
}
到目前为止,一切正常。我现在想念的是一种常用方法,最好在Utility 类中进行排序验证,无论调用哪个枚举。类似:
protected boolean checkProperties(Properties props) throws MissingPropertyException {
for(Property property : props.values()) {
/* do something */
}
}
在超级构造器上这样称呼它:
public Utility() throws MissingPropertyException {
checkProperties(/* here comes the child.Properties */);
}
(是的,我知道上面的代码不会编译,这只是象征性的)
有什么建议吗?如果可能,将“帮助类”解决方案留作最后的手段
【问题讨论】:
-
那张支票对我来说毫无意义。让我怀疑 Enum 不是你在这里需要的。这些检查应该确保什么?
标签: java inheritance enums super