如何初始化static
的{{1}}不可修改的实例?
答案 0 :(得分:15)
这是使用匿名类的更好方法:
static final SparseIntArray myArray = new SparseIntArray() {
{
append(1, 2);
append(10, 20);
}
};
答案 1 :(得分:9)
你无法做你想做的事。至少,不是你试图这样做的方式。没有SparseArray
的实现是不可修改的。
但是,您可以创建一个。方法如下:
CustomSparseArray<E>
,并让它扩展SparseArray
。覆盖更改数组中元素的所有方法,并将其替换为以下内容:
@Override
public void append(int key, E value) {
if (mLocked)
return; // Maybe throw an exception
super.append(key, value);
}
boolean mLocked = false;
。接下来,您需要一个类似以下的方法:
public void lock() { mLocked = true; }
最后,使用类似于the other post的方法实现静态变量:
public class Test {
private static final CustomSparseArray<Integer> myArray;
static {
myArray = new CustomSparseArray<Integer>();
myArray.append(1, 1);
myArray.append(2, 5);
myArray.lock();
}
}
然后,您的SparseArray
变量static
中有一个不可修改的myArray
。
答案 2 :(得分:0)
这对我有用:
static final SparseIntArray CMyArray = new SparseIntArray();
static {
CMyArray.append(2, 4);
CMyArray.append(8, 3);
CMyArray.append(255, 1);
}
根据:https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html