How can I initialize a static
, unmodifiable instance of android.util.SparseArray
?
You cannot do what you are attempting to. At least, not how you are attempting to do it. There is no implementation of SparseArray
that is unmodifiable.
However, you could create one. Here's how:
- Create a class, say
CustomSparseArray<E>
, and have it extendSparseArray
. Override all methods that change the elements in the array, and replace them with something like this:
@Override public void append(int key, E value) { if (mLocked) return; // Maybe throw an exception super.append(key, value); }
- Then, add in a member variable to the class,
boolean mLocked = false;
. Next, you need a method like the following:
public void lock() { mLocked = true; }
Lastly, implement your static variable using a method similar to in 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(); } }
Then you have an unmodifiable SparseArray
in your static
variable myArray
.
Here is a better way using an anonymous class:
static final SparseIntArray myArray = new SparseIntArray() {
{
append(1, 2);
append(10, 20);
}
};
You cannot do what you are attempting to. At least, not how you are attempting to do it. There is no implementation of SparseArray
that is unmodifiable.
However, you could create one. Here's how:
- Create a class, say
CustomSparseArray<E>
, and have it extendSparseArray
. Override all methods that change the elements in the array, and replace them with something like this:
@Override public void append(int key, E value) { if (mLocked) return; // Maybe throw an exception super.append(key, value); }
- Then, add in a member variable to the class,
boolean mLocked = false;
. Next, you need a method like the following:
public void lock() { mLocked = true; }
Lastly, implement your static variable using a method similar to in 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(); } }
Then you have an unmodifiable SparseArray
in your static
variable myArray
.
This works for me:
static final SparseIntArray CMyArray = new SparseIntArray();
static {
CMyArray.append(2, 4);
CMyArray.append(8, 3);
CMyArray.append(255, 1);
}
as per: https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
© 2022 - 2024 — McMap. All rights reserved.