我有一个接近扩展枚举的要求,因为这是不可能的,在网上做了一些研究之后,我想出了这种使用接口并使枚举扩展它们的方法。
我的问题是我有一些基本类型 A、B 和每个类型的标志,表明是否必须检查。同样,我有一些扩展类型 C... 在检查其标志后执行相同的操作。
这是执行此操作的代码
类型接口:
public interface Type {
public String name();
}
这是使用基本类型的类
public class BasicChecker {
private static boolean checkA = false;
private static boolean checkB = false;
public enum BasicType implements Type {
A, B;
}
public static boolean isCheckA() {
return checkA;
}
public static void setCheckA(boolean checkA) {
BasicChecker.checkA = checkA;
}
public static boolean isCheckB() {
return checkB;
}
public static void setCheckB(boolean checkB) {
BasicChecker.checkB = checkB;
}
public static void doStuff(String message, Type type) {
if (type.name().equalsIgnoreCase(BasicType.A.name())) {
doStuff(message, isCheckA());
} else if (type.name().equalsIgnoreCase(BasicType.B.name())) {
doStuff(message, isCheckB());
}
}
protected static void doStuff(String message, boolean flag) {
if (someCheckMethod() && flag) {
doStuff(message, flag);
}
}
private static boolean someCheckMethod() {
return false;
}
}
这是使用扩展类型的类
public class ExtendedChecker extends BasicChecker {
private static boolean checkC = false;
public enum ExtendedType implements Type {
C;
}
public static boolean isCheckC() {
return checkC;
}
public static void setCheckC(boolean checkC) {
ExtendedChecker.checkC = checkC;
}
public static void doStuff(String message, Type type) {
BasicChecker.doStuff(message, type);
if (type.name().equalsIgnoreCase(ExtendedType.C.name())) {
doStuff(message, isCheckC());
}
}
}
我现在要解决的是从 log 方法中删除所有 if else 情况。我也想看看是否有更好的方法来做到这一点。请忽略静态。我确实希望它们是静态字段和方法。