繁体   English   中英

可以使用枚举作为 Java 中的列表元素吗?

[英]Using enums as List elements in Java possible?

我有一个 state 可以通过一些离散的variables进行参数化。 所以每个variable都可以用几个enum值来描述。 但是variables的数量可能会有所不同。

以下代码是不可能的:

    public enum Var0 {
        LEFT, RIGHT;
    }

    public enum Var1 {
        TOP, BOTTOM;
    }


    // somewhere
    List<enum> vars = new ArrayList<>();  // this is not working 
    vars.set(0,Var0);  // put the whole enum in a list element
    vars.set(1, Var1);

    // somewhere else I want something like this
    for (int i = 0; i < vars.get(i).values().length; i++) {
        vars.get(i).
        for (Enum var : vars.get(i).values()) {
            System.out.println(var.name())
            ..
        }
    }
   // or this ??
   System.out.println(vars.get(1).values()[1]) // 
   ...

欢迎提出任何建议,如果/如何在这种情况下使用enums

Var0Var1是类,因此在需要表达式的地方编写vars.set(0, Var0)是编译时错误。 List<enum>也是语法错误,因为enum不是类型; Enum是。

但是,您可以使用Enum值的 arrays 列表来实现:

List<Enum[]> vars = new ArrayList<>();
vars.add(Var0.values());
vars.add(Var1.values());

for(Enum[] e : vars) {
    for(Enum v : e) {
        System.out.println(v.name());
    }
}

不完全是您所要求的,但如果您真的想要,您实际上可以展平列表并摆脱 arrays:

public class EnumsWithInterface {

    public interface VarIf {
        String name();
    }

    public enum Var0 implements VarIf {
        LEFT, RIGHT;
    }

    public enum Var1 implements VarIf {
        TOP, BOTTOM;
    }

    public static void main(String[] args) {
        List<VarIf>vars = new ArrayList<VarIf>();
        vars.addAll(Arrays.asList(Var0.values()));
        vars.addAll(Arrays.asList(Var1.values()));

        for (VarIf var : vars) {
            System.out.println(var.name());
        }
    }
}

我想,用它制作Set会更有意义。 请注意,如果您想再次拥有一个enum变量,则必须检查 / 强制转换,因为它在编译时会丢失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM