有没有办法指定接受数组的构造函数,然后直接向该构造函数传递该数组的预定义值列表。
以下是一个例子:
假设您有enum名为单位。
public enum Unit {
PROBE (null),
STALKER (null);
private final String[] require;
Unit(String[] require) {
this.require = require;
}
public String[] require() { return require; }
}
以上代码有效,但如果我想用值列表替换空值怎么办?
例如,这是我想做的,但它无效:
public enum Unit {
PROBE (null),
STALKER ({"cybernetics core"});
private final String[] require;
Unit(String[] require) {
this.require = require;
}
public String[] require() { return require; }
}
这一次,在上面的例子中,我试图将一个数组元素值传递给构造函数。我意识到我可以指定一个数组来存储这个值,例如String[] stalker = {"cybernetics core"};
但考虑到在我的完整项目中我需要输入不同的数组值,我正在寻找一种更优雅的方式。有吗?
答案 0 :(得分:6)
您可以使用常规数组构造函数:
STALKER(new String[] { "value1", "value2" });
答案 1 :(得分:1)
您的String
数组初始化不会这样编译。
只需替换:
STALKER ({"cybernetics core"});
带
STALKER (new String[]{"cybernetics core"});
答案 2 :(得分:1)
除了使用数组构造函数new String[] {}
之外,您还可以为您的Enum-Constructor使用varargs:
public enum Unit {
PROBE (),
STALKER ("cybernetics core");
private final String[] requirements;
Unit(String... requirements) {
this.requirements = requirements;
}
public String[] requirements() { return requirements; }
}
在幕后,Java为varargs创建了一个数组,但是在代码中读取它会更好。但请注意,空参数会导致空数组,类似于new String[0]
。在许多情况下,空数组的处理要比null
好得多,因为您的代码中不需要进行空值检查。