8

の数をサポートする必要がありますChartTypes。これらの各チャート タイプは、多数の をサポートできChartSubTypesます。たとえば、AreaChartタイプにPercentAreaStackedAreaなどがあります。私は、列挙型を両方に使用して、ChartTypesSubTypesのようなマップをどこかに維持することを考えています。

Map<ChartType,List<ChartSubTypes> mapTypes;

ここでネストされた列挙型パターンを使用できますか? はいの場合、どのように?

4

3 に答える 3

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);
    }
   }
于 2013-03-08T07:19:43.983 に答える
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 に 1 つ以上の SubChartTypes が必要であるという要件がある場合は、その要件を適用するためにこのコンストラクターが必要になります。

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

可変長引数は引数をゼロにすることができます。

于 2013-03-08T07:23:59.193 に答える
1

列挙型をグループ化するには、インターフェイスを使用します。

public interface ChartType {
    public someCommonMethod();
}

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

もちろん、まだ知らない場合でも、そのインターフェイスの複数の実装を含めることができます。インターフェイスをパラメーター (ジェネリックまたはメソッド引数) 型としても使用できます。

于 2013-03-08T07:28:20.720 に答える