【问题标题】:Passing Hard-coded Array Values to Constructor将硬编码的数组值传递给构造函数
【发布时间】:2014-03-05 14:06:05
【问题描述】:

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

这是一个例子:

假设你有一个名为Unitenum

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

【问题讨论】:

  • this 'STALKER (new String[]{"cybernetics core"});'编译..
  • 不要忘记“网关”应该包含在该数组 xD 中。对不起,伙计们,不得不说

标签: java arrays enums


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    除了使用数组构造函数new String[] {},您还可以为枚举构造函数使用可变参数:

    public enum Unit {
    
      PROBE    (),
      STALKER  ("cybernetics core");
    
      private final String[] requirements;
    
      Unit(String... requirements) {
          this.requirements  = requirements;
      }
    
      public String[] requirements() { return requirements; }
    }
    

    在幕后,Java 为可变参数创建了一个数组,但在代码中阅读起来更方便。但是请注意,空参数会导致空数组,类似于new String[0]。在许多情况下,空数组比null 更容易处理,因为您不需要在代码中检查空值。

    【讨论】:

      【解决方案3】:

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

      只需替换:

      STALKER  ({"cybernetics core"});
      

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

      【讨论】:

        猜你喜欢
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        相关资源
        最近更新 更多