列挙型の拡張に近い要件がありますが、それは不可能であるため、オンラインで調査した後、インターフェイスを使用して列挙型を拡張するというこのアプローチを思い付きました。
私の問題は、いくつかの基本的なタイプ 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());
}
}
}
私が今解決しようとしているのは、すべての if else ケースを log メソッドから削除することです。また、これを行うためのより良い方法があるかどうかを確認しようとしています。統計は無視してください。それらを静的フィールドとメソッドにしたいのです。