How can I initialize a static, unmodifiable instance of android.util.SparseArray?
            Asked
            
        
        
            Active
            
        
            Viewed 7,901 times
        
    9
            
            
        - 
                    1You don't initialize static properties. What exactly are you trying to do? – Cat May 05 '13 at 23:01
- 
                    1@Eric the SparseArray equivalent of this answer http://stackoverflow.com/a/507658/884677 for a static map – firyice May 05 '13 at 23:08
- 
                    1@Eric yes, exactly as I stated in this question, and the linked question/answer – firyice May 06 '13 at 00:30
- 
                    You're better off using a HashMap for this purpose. I tried tackling the same problem. – IgorGanapolsky Dec 11 '15 at 16:00
3 Answers
10
            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.
1
            
            
        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
 
    
    
        PJ_Finnegan
        
- 1,981
- 1
- 20
- 17
 
     
     
     
    