Java 我可以用其他最终字符串[]定义最终字符串[]吗?
我定义了一些最终字符串数组,并在另一个地方初始化它们,现在我想让遍历它们更容易,所以可能需要将它们放入最终字符串[]Java 我可以用其他最终字符串[]定义最终字符串[]吗?,java,Java,我定义了一些最终字符串数组,并在另一个地方初始化它们,现在我想让遍历它们更容易,所以可能需要将它们放入最终字符串[] private static final String[] a,b,c,d; private static final String[][] all = {a,b,c,d}; 但它给了我错误 The blank final field a may not have been initialized 现在我知道最后一个变量应该在使用前赋值,但我不知道如何解决我的问题,有
private static final String[] a,b,c,d;
private static final String[][] all = {a,b,c,d};
但它给了我错误
The blank final field a may not have been initialized
现在我知道最后一个变量应该在使用前赋值,但我不知道如何解决我的问题,有没有比下面的代码更容易遍历a、b、c、d的方法
for(String s : a){};
for(String s : b){};
...
顺便说一句,我想通过遍历它们来分配,只要您知道
a
到d
的大小,就可以在声明它们时初始化它们:
private static final String[] a = new String[YOUR_VALUE_HERE],
b = new String[YOUR_VALUE_HERE],
c = new String[YOUR_VALUE_HERE],
d = new String[YOUR_VALUE_HERE];
private static final String[][] all = {a,b,c,d};
以后您仍然可以初始化数组的内容,因为只有数组引用本身是最终的。如果您想要静态数组和最终数组,我建议您使用仅带访问器的单例模式。这样,您就有一个实例(静态),而这些数组不能在另一个实例(最终)上更改 无论如何,您应该记住,最终数组不是不可变的。如果您想拥有不可变的,我建议您阅读以下内容: 仍然可以只添加getter,如
public String get(int array, int index){
return all[i][y];
}
如果需要初始化静态字段,请使用静态块:
static final String[] a;
static {
// put all the logic here
// and assign final var at the end
a = new String[17];
}
static final String[][] all = {a};
还要记住,上面例子中的顺序很重要。在初始化
a
之前声明all
数组将导致空白的最终字段a可能尚未初始化
错误。当前在哪里初始化字符串[]
变量?我在构造函数中初始化它们或者你在构造函数中初始化静态
变量?@Oli Charlesworth orz…这似乎是错误的。现在我在静态块中初始化它们,仍然存在错误,所以你可以使用静态
初始化器块:静态{/*init arrays here*/}/code>
static final String[] a;
static {
// put all the logic here
// and assign final var at the end
a = new String[17];
}
static final String[][] all = {a};