我看到很明显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();
}
}
但这看起来很难看......有更好的解决方案吗?
谢谢和问候, 丹尼尔
答案 0 :(得分:9)
你可以直接将数组传递给方法。如果要初始化数组并将其传递给一行中的方法,则需要:
testFunk(new int[] {1,2,3,4});
而不是
testFunk({1,2,3,4});
答案 1 :(得分:1)
如果您最关心的是提供数组值作为文字,可以使用:
同样。
答案 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}});