我需要支持一些ChartTypes
。每种图表类型都可以支持多个ChartSubTypes
。例如,AreaChart
类型可以包含PercentArea
,StackedArea
等。我正在考虑为ChartTypes
和SubTypes
使用枚举,然后在某处保留一张地图将是这样的:
Map<ChartType,List<ChartSubTypes> mapTypes;
我可以在某种程度上使用嵌套的枚举模式吗?如果是,那么如何?
答案 0 :(得分: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);
}
}
答案 1 :(得分: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应该有一个或多个SubChartTypes,那么您将需要此构造函数来强制执行该要求。
ChartType(SubChartType requiredSubType, SubChartType... subChartTypes) {
this.subChartTypes.add(requiredSubType);
Collections.addAll(this.subChartTypes, subChartTypes);
}
Varargs可以没有参数。
答案 2 :(得分:1)
使用接口,对枚举类型进行分组:
public interface ChartType {
public someCommonMethod();
}
public enum AreaChart extends ChartType{
PercentArea {
public someCommonMethod(){
//your code here
}
},
StackedArea {
public someCommonMethod(){
//your code here
}
};
}
您当然可以包含该接口的多个实现,即使您还不知道它。您也可以将接口用作参数(通用或方法参数)类型。