在这种情况下使用适合的嵌套枚举?

我需要支持许多ChartTypes 。 这些图表类型中的每一种都可以支持许多ChartSubTypes 。 例如, AreaChart类型可以有PercentAreaStackedArea等。我正在考虑为SubTypesSubTypes使用Enum,然后在某处维护一个类似于以下内容的地图:

 Map<ChartType,List mapTypes; 

我可以在这里以某种方式使用嵌套的枚举模式吗? 如果是,那怎么样?

如果该定义是常量(即您知道哪些子类型可以包含每种类型)您可以在此处使用枚举定义,如下所示

 enum ChartSubTypes{ PercentArea, StackedArea, ChartSubType3; } enum ChartTypes{ AreaChart(ChartSubTypes.PercentArea, ChartSubTypes.StackedArea), CharType2(ChartSubTypes.PercentArea, ChartSubTypes.ChartSubType3); private List subTypes = new ArrayList(); private ChartTypes(ChartSubTypes ...chartSubTypes){ for(ChartSubTypes subType : chartSubTypes){ subTypes.add(subType); } } public List getSubTypes(){ return Collections.unmodifiableList(subTypes); } } 

是的,您可以将图表子类型添加到图表类型,如下所示:

 public enum ChartType { AreaChart(SubChartType.PercentArea, SubChartType.StackedArea), AnotherChart(SubChartType.PercentArea); private List subChartTypes = new ArrayList<>(); ChartType(SubChartType... subChartTypes) { Collections.addAll(this.subChartTypes, subChartTypes); } public List getSubChartTypes() { return this.subChartTypes; } public static Map> getMapTypes() { HashMap> mapTypes = new HashMap<>(); for (ChartType chartType : values()) { mapTypes.put(chartType, chartType.getSubChartTypes()); } return mapTypes; } } 

要获取您想要的地图,只需调用ChartType.getMapTypes();

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

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

Varargs可以没有参数。

使用接口,对枚举类型进行分组:

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

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