繁体   English   中英

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

[英]Passing Hard-coded Array Values to Constructor

有没有一种方法可以指定一个接受数组的构造函数,然后将该数组的预定义值列表直接传递给该构造函数。

这是一个例子:

假设您有一个名为Unit枚举

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"}; 但是考虑到在我的整个项目中,我需要在此处输入不同的数组值,所以我在寻找一种更优雅的方法。 在那儿?

您可以使用常规数组构造函数:

STALKER(new String[] { "value1", "value2" });

您的String数组初始化将不会这样编译。

只需替换:

STALKER  ({"cybernetics core"});

STALKER  (new String[]{"cybernetics core"});

除了使用数组构造函数new String[] {}您还可以将varargs用于Enum-Constructor:

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 ,你不要在你的代码需要零检查。

暂无
暂无

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

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