2013-03-08 70 views
8

我有一个要求来支持ChartTypes。这些图表类型中的每一种都可以支持一些ChartSubTypes。例如AreaChart类型可以有PercentAreaStackedArea等我想用一个枚举既为ChartTypesSubTypes,然后保持某处的地图,这将是这样的:在这种情况下适用嵌套枚举?

Map<ChartType,List<ChartSubTypes> mapTypes; 

我可以以某种方式使用嵌套枚举模式这里?如果是,那么如何?

+0

'AreaChart','PercentArea'等,也是枚举? – Mordechai 2013-03-08 07:22:01

+0

@MouseEvent是的,它们也是常量 – Geek 2013-03-08 07:22:40

+0

将它们建模为类并使用继承是否更有意义?也许你后来添加更多的图表,你现在不知道? – keuleJ 2013-03-08 07:27:31

回答

5

如果定义为常数(即你知道哪个子类型可以包含所有类型),你可以在这里用枚举定义如下

enum ChartSubTypes{ 
    PercentArea, StackedArea, ChartSubType3; 
} 

enum ChartTypes{ 
    AreaChart(ChartSubTypes.PercentArea, ChartSubTypes.StackedArea), 
    CharType2(ChartSubTypes.PercentArea, ChartSubTypes.ChartSubType3); 

    private List<ChartSubTypes> subTypes = new ArrayList<ChartSubTypes>(); 

    private ChartTypes(ChartSubTypes ...chartSubTypes){ 
     for(ChartSubTypes subType : chartSubTypes){ 
      subTypes.add(subType); 
     } 
    } 

    public List<ChartSubTypes> getSubTypes(){ 
     return Collections.unmodifiableList(subTypes); 
    } 
    } 
3

是的,你可以添加子图表类型图表类型像因此:

public enum ChartType { 
    AreaChart(SubChartType.PercentArea, SubChartType.StackedArea), 
    AnotherChart(SubChartType.PercentArea); 

    private List<SubChartType> subChartTypes = new ArrayList<>(); 

    ChartType(SubChartType... subChartTypes) { 
     Collections.addAll(this.subChartTypes, subChartTypes); 
    } 

    public List<SubChartType> getSubChartTypes() { 
     return this.subChartTypes; 
    } 

    public static Map<ChartType,List<SubChartType>> getMapTypes() { 
     HashMap<ChartType,List<SubChartType>> mapTypes = new HashMap<>(); 
     for (ChartType chartType : values()) { 
      mapTypes.put(chartType, chartType.getSubChartTypes()); 
     } 
     return mapTypes; 
    } 
} 

为了得到地图,你就想简单地调用ChartType.getMapTypes();

如果要求每个ChartType应该有一个或多个SubChartType,那么您将需要此构造函数来执行该要求。

ChartType(SubChartType requiredSubType, SubChartType... subChartTypes) { 
    this.subChartTypes.add(requiredSubType); 
    Collections.addAll(this.subChartTypes, subChartTypes); 
} 

可变参数可以有零个参数。

1

使用的接口,以组枚举类型:

public interface ChartType { 
    public someCommonMethod(); 
} 

public enum AreaChart extends ChartType{ 
    PercentArea { 
     public someCommonMethod(){ 
      //your code here 
     } 
    }, 
    StackedArea { 
     public someCommonMethod(){ 
      //your code here 
     } 
    }; 
} 

当然你也可以包含多个接口实现,即使你不知道它。您也可以将该接口用作参数(泛型或方法参数)类型。

相关问题