关联枚举和在泛型中使用

2019年2月6日 35点热度 0条评论 来源: Somu

我需要为国家和州创建枚举。关联枚举和在泛型中使用

  1. 什么是创建和关联这些枚举最合适的方式(如在国家X可以有状态P,Q,R等)?

  2. 如果我有一个泛型类参数与一个国家的类型,我可以宣布将接受只对特定国家一个国家的方法?

例如像:

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部分,“无” - 有没有办法限制的情况下,特定的类到子集。

你可以,如果你定义为每个国家和它的美国独立枚举单独的一类,但是这似乎并不像一个好主意。

    原文作者:Somu
    原文地址: https://stackoverflow.com/q/13972037
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。