我需要为国家和州创建枚举。
创建和关联这些枚举的最合适方法是什么(因为在 X 国可以有状态 P、Q、R 等)?
如果我有一个使用 Country 类型参数化的泛型类,我可以声明一个方法来接受仅适用于特定国家的 State 吗?
例如:
public abstract class TestClass <T extends Country> {
public void addState(T.State state);
public List<T.State> getSelectedStates();
}
编辑 1:为了便于维护,我希望每个国家都有一个单独的州枚举,而不是一个包含所有国家数百个州的州枚举。请给出意见。
编辑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();
}
}