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



我正在处理一些代码,我不希望对这些代码进行过多的更改。但我遇到了一个问题。我想根据条件isConditionMet()更改arrayOfStrings的内容。我不能在静态初始化块中执行此操作。

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

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

方法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

最新更新