关联枚举和在泛型中使用
什么是创建和关联这些枚举最合适的方式(如在国家X可以有状态P,Q,R等)?
如果我有一个泛型类参数与一个国家的类型,我可以宣布将接受只对特定国家一个国家的方法?
例如像:
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();
}
}
回答:
要回答第1部分,您可以定义两个枚举,其中一个参考,另外,像这样:
public enum State { A, B, C, D, E
}
public enum Country {
USA(State.A, State.B),
UK(State.C, State.D);
private final List<State> states;
Country(State... states) {
this.states = Arrays.asList(states);
}
public List<State> getStates() {
return states;
}
}
要回答第2部分,“无” - 有没有办法限制的情况下,特定的类到子集。
你可以,如果你定义为每个国家和它的美国独立枚举单独的一类,但是这似乎并不像一个好主意。
回答:
您可以枚举实现这样的接口:从实现接口enum
■不要支持继承不过也
public enum MyEnum implements MyInterface<MyType> { // ...
}
除了如果你希望在你的enum
中有共同的功能,你总是可以编写一些策略 o投入他们。
以上是 关联枚举和在泛型中使用 的全部内容, 来源链接: utcz.com/qa/266338.html