我们如何在java中访问枚举的类型和子类型?

时间:2016-09-13 05:34:52

标签: java enums

我需要使用enum实现以下内容。

import java.util.*;

/**
 *
 * @author mukesh
 */
public class MyTest {
private List<SubTypes> subTypes = new ArrayList<SubTypes>();
    enum Types {
        PercentArea, StackedArea, ChartSubType3;
    }

    enum SubTypes {
        PERSENTAREA1(Types.PercentArea),
        PERSENTAREA2(Types.PercentArea),
        PERSENTAREA3(Types.PercentArea),
        STACKAREA1(Types.StackedArea),
        STACKAREA2(Types.StackedArea),
        STACKAREA3(Types.StackedArea);           

        Types t;
        private SubTypes(Types t) {            
                this.t = t;
            }
        }

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

    public static void main(String[] args) {               
        /* How can i get SubTypes based on base type ??? */
    }}

示例:

假设在一个组合中我有Types - PercentAreaStackedAreaChartSubType3等等,如果我选择PercentArea,那么第二个组合可以获得子类型例如PERSENTAREA1PERSENTAREA2等。

任何人都可以指导我如何检索给定类型的所有子类型值。

3 个答案:

答案 0 :(得分:2)

我认为你需要这样的东西

private static void getSubTypes(Types type)
{
    SubTypes[] values = SubTypes.values();
    for(SubTypes value : values)
    {
        if(value.t == type){
            System.out.println("found subtype "+ value);
        }
    }

}

希望这有帮助!

祝你好运!

答案 1 :(得分:1)

您可以使用以下类型的子类型:

private static final Map<Types, List<SubTypes>> typesMap = new ConcurrentHashMap<>();   

public static void addSubType(Types type, SubTypes subTypes){
    List<SubTypes> subTypeList;
    synchronized (type)
    {
        subTypeList = typesMap.get(type);
        if (subTypeList == null){
            typesMap.put(type, subTypeList = new LinkedList<>());
        }
    }
    subTypeList.add(subTypes);
}

public static List<SubTypes> getSybTypeList(Types type){
    return typesMap.get(type);
}

enum Types {
    PercentArea, StackedArea, ChartSubType3;
}

enum SubTypes {

    PERSENTAREA1(Types.PercentArea), PERSENTAREA2(Types.PercentArea), PERSENTAREA3(Types.PercentArea), STACKAREA1(
            Types.StackedArea), STACKAREA2(Types.StackedArea), STACKAREA3(Types.StackedArea);

    Types t;

    private SubTypes(Types t) {
        this.t = t;
        addSubType(t, this);
    }
}

答案 2 :(得分:-3)

您可以使用枚举上的values()方法获取所有Subtypes,然后随意保留或丢弃。

https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html