java—如何有条件地初始化静态数组

hec6srdp  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(253)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

昨天关门了。
改进这个问题
我正在使用一些代码,我不想改变超过必要的。但我遇到了一个问题。我想更改 arrayOfStrings 视情况而定 isConditionMet() . 我不能在静态初始化块中执行此操作。

class Scratch {
  static final String[] arrayOfStrings = {"one", "two", "three"};
  //...
}

如何在不使用构造函数或更改数据结构的情况下有条件地设置数组的内容?

vsdwdz23

vsdwdz231#

方法 isConditionMet 必须也是 static ,否则无法基于方法的此类条件结果示例化数组。
然后可以使用三元条件运算符:

static final String[] arrayOfStrings = isConditionMet() ? 
        new String[]{"one", "two", "three"} :             // fill in values if 'true'
        new String[]{};                                   // empty if 'false'

... 或静态初始化块(imho,在这种特殊情况下可读性更强):

static final String[] arrayOfStrings;

static {
    arrayOfStrings = isConditionMet() ? 
            new String[]{"one", "two", "three"} :
            new String[]{};
}

记住:如果数组 static ,方法(和初始化块)也必须 static . 如果数组是 non-static ,方法可以是 static / non-static ,但初始化块也必须 non-static 如果使用。

相关问题