我有一個要求來支持ChartTypes
。這些圖表類型中的每一種都可以支持一些ChartSubTypes
。例如AreaChart
類型可以有PercentArea
,StackedArea
等我想用一個枚舉既爲ChartTypes
和SubTypes
,然後保持某處的地圖,這將是這樣的:在這種情況下適用嵌套枚舉?
Map<ChartType,List<ChartSubTypes> mapTypes;
我可以以某種方式使用嵌套枚舉模式這裏?如果是,那麼如何?
我有一個要求來支持ChartTypes
。這些圖表類型中的每一種都可以支持一些ChartSubTypes
。例如AreaChart
類型可以有PercentArea
,StackedArea
等我想用一個枚舉既爲ChartTypes
和SubTypes
,然後保持某處的地圖,這將是這樣的:在這種情況下適用嵌套枚舉?
Map<ChartType,List<ChartSubTypes> mapTypes;
我可以以某種方式使用嵌套枚舉模式這裏?如果是,那麼如何?
如果定義爲常數(即你知道哪個子類型可以包含所有類型),你可以在這裏用枚舉定義如下
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);
}
}
是的,你可以添加子圖表類型圖表類型像因此:
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);
}
可變參數可以有零個參數。
使用的接口,以組枚舉類型:
public interface ChartType {
public someCommonMethod();
}
public enum AreaChart extends ChartType{
PercentArea {
public someCommonMethod(){
//your code here
}
},
StackedArea {
public someCommonMethod(){
//your code here
}
};
}
當然你也可以包含多個接口實現,即使你不知道它。您也可以將該接口用作參數(泛型或方法參數)類型。
'AreaChart','PercentArea'等,也是枚舉? – Mordechai 2013-03-08 07:22:01
@MouseEvent是的,它們也是常量 – Geek 2013-03-08 07:22:40
將它們建模爲類並使用繼承是否更有意義?也許你後來添加更多的圖表,你現在不知道? – keuleJ 2013-03-08 07:27:31