Как инициализировать статический SparseArray
Как я могу инициализировать static
немодифицируемый экземпляр android.util.SparseArray
?
3 ответа
Вы не можете делать то, что вы пытаетесь. По крайней мере, не так, как вы пытаетесь это сделать. Там нет реализации 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; }
Наконец, реализуйте вашу статическую переменную, используя метод, аналогичный тому, что описан в другом посте:
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
,
Вот лучший способ использования анонимного класса:
static final SparseIntArray myArray = new SparseIntArray() {
{
append(1, 2);
append(10, 20);
}
};
Это работает для меня:
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
Для неизменяемого экземпляра android.util.SparseArray вы можете использовать реализацию Google: