国と州の列挙型を作成する必要があります。
これらの列挙型を作成して関連付ける最も適切な方法は何ですか?
Country 型でパラメータ化されたジェネリック クラスがある場合、特定の国でのみ使用可能な State を受け入れるメソッドを宣言できますか?
たとえば、次のようなものです。
public abstract class TestClass <T extends Country> {
public void addState(T.State state);
public List<T.State> getSelectedStates();
}
編集 1:メンテナンスを容易にするために、すべての国の数百の州を含む単一の State 列挙ではなく、国ごとに個別の State 列挙を使用することをお勧めします。コメントしてください。
編集2:これに非常によく似た問題に対して、次の解決策を使用しました。
解決策: @Bohemianが示唆したように、
interface Country { }
interface State<T extends Country> { }
public class Countries {
public static class USA implements Country { }
public static class India implements Country { }
}
enum UsaStateEnum implements State<Countries.USA> {
NY, MA, MD, CA
}
enum IndiaStateEnum implements State<Countries.India> {
DEL, BLR
}
class GenericClass<T extends Country> {
List<State<T>> states;
public void addState(State<T> state) {
if (states == null) {
states = new ArrayList<State<T>>();
}
states.add(state);
}
public List<State<T>> getSelectedStates() {
return states;
}
}
public class NestedEnumTest {
public static void main(String[] args) {
GenericClass<Countries.USA> obj = new GenericClass<Countries.USA>();
obj.addState(UsaStateEnum.MA);
// obj.addState(IndiaStateEnum.DEL); // NOT ALLOWED
List<State<Countries.USA>> states = obj.getSelectedStates();
}
}