将硬编码数组值传递给构造函数

时间:2014-03-05 14:06:05

标签: java arrays enums

有没有办法指定接受数组的构造函数,然后直接向该构造函数传递该数组的预定义值列表。

以下是一个例子:

假设您有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"};但考虑到在我的完整项目中我需要输入不同的数组值,我正在寻找一种更优雅的方式。有吗?

3 个答案:

答案 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好得多,因为您的代码中不需要进行空值检查。