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

3

我需要使用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 - PercentArea, StackedArea, ChartSubType3 等选项,如果我选择了 PercentArea,那么第二个组合框可以获得子类型,例如 PERSENTAREA1PERSENTAREA2 等。

请问如何检索给定类型的所有子类型的值?


“'How can i get SubTypes based on base type?' 这句话的意思是什么?” - user3161880
假设在一个组合框中,我有类型 - 百分比面积、堆叠面积、图表子类型3等。假设我选择了百分比面积,则第二个组合框可以获取子类型,例如PERSENTAREA1、PERSENTAREA2等。 - mukesh patel
1
为什么不直接将子类型添加到类型中:PercentArea(SubTypes.PRESENTAREA1, SubTypes.PRESENTAREA2)等,而不是将类型作为子类型的属性。 - Andy Turner
@AndyTurner 是的,我可以这样做,但它已经在许多文件中使用了,所以我不想更改它,我想根据类型定义自己的子类型。 - mukesh patel
https://dev59.com/qoLba4cB1Zd3GeqPdFQb#68579907 - Blessed Geek
3个回答

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);
        }
    }

}

希望这能有所帮助!祝好运!

谢谢帮忙。1Q 是仅获取单个值还是多个值,我认为它只会返回单个值,对吗? - mukesh patel
由于for循环,它将给出所有的值,如果您希望该方法返回所找到的答案,请将所有值存储在一个数组中并返回该数组。 - Vihar
很高兴认识@mukeshpatel。 - Vihar

1
您可以像下面这样使用SubType缓存:

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);
    }
}

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接