带有数组属性的java枚举

时间:2017-12-14 14:42:54

标签: java arrays enums

我看到很明显java不允许将数组直接传递给方法(以前不知道这个)。例如,这不编译:

public static void main(String[] args) {
    testFunk({1,2,3,4});
}

public static void testFunk(int[] a) {}

但这样做:

public static void main(String[] args) {
    int[] a = {1,2,3,4};
    testFunk(a);
}

public static void testFunk(int[] a) {}

但是如果我需要使用接受数组的构造函数创建枚举呢?

例如,我尝试了以下代码,但由于与上述相同的原因,它无法编译:

    public enum FigureType {

    SQUARE({{true, true},{false, false}});

    private boolean[][] matrix;

    private FigureType(boolean[][] matrix) {
        this.matrix = matrix;
    }

}

不幸的是,这里似乎没有一个简单的解决方法。我想到的唯一选择就是建立这样的东西:

    public enum FigureType {

    SQUARE(() -> {boolean[][] array = {{true,true},{false,false}}; return array; });

    private boolean[][] matrix;

    private FigureType(Supplier<boolean[][]> supplier) {
        this.matrix = supplier.get();
    }

}

但这看起来很难看......有更好的解决方案吗?

谢谢和问候, 丹尼尔

4 个答案:

答案 0 :(得分:9)

可以直接将数组传递给方法。如果要初始化数组并将其传递给一行中的方法,则需要:

testFunk(new int[] {1,2,3,4});

而不是

testFunk({1,2,3,4});

答案 1 :(得分:1)

如果您最关心的是提供数组值作为文字,可以使用:

  • varargs / ellipsed:boolean ...
  • 将参数设为列表并使用Arrays.asList()

同样。

答案 2 :(得分:1)

您可以使用new关键字直接初始化数组:

public enum FigureType {

    SQUARE(new boolean[][]{{true, false}, {false,true}});

    FigureType(boolean[][] array){ ... }

}

要提到的是,在2D数组中,可以使用短数组初始值设定项({})。

答案 3 :(得分:0)

通过传递元素列表作为参数没有意义,直到你包装一些结构(对象)并通过new运算符初始化它。

所以,而不是: SQUARE({{true,true},{false,false}});

做: SQUARE(new boolean [] [] {{true,true},{false,false}});