2013-05-05 13 views

Antwort

6

Sie können nicht tun, was Sie versuchen. Zumindest nicht, wie Sie es versuchen. Es gibt keine Implementierung von SparseArray, die nicht änderbar ist.

Sie könnten jedoch eine erstellen. Hier ist, wie:

  • Erstellen Sie eine Klasse, sagen CustomSparseArray<E>, und haben es SparseArray zu verlängern.
  • Aufschalten alle Methoden, die die Elemente in der Anordnung zu ändern, und ersetzen sie durch etwas wie folgt aus:

    @Override 
    public void append(int key, E value) { 
        if (mLocked) 
         return; // Maybe throw an exception 
        super.append(key, value); 
    } 
    
  • Dann fügen Sie in einer Membervariable auf die Klasse, boolean mLocked = false;.
  • Als nächstes müssen Sie eine Methode wie folgt aus:

    public void lock() { mLocked = true; } 
    
  • Schließlich implementieren Ihre statischen Variablen ein ähnliches Verfahren wie die Verwendung 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(); 
        } 
    } 
    

Dann Sie eine haben nicht änderbar SparseArray in Ihrer static Variable myArray.

+0

Genau das habe ich gesucht. Vielen Dank! – firyice

15

Hier ist ein besserer Weg, eine anonyme Klasse mit:

static final SparseIntArray myArray = new SparseIntArray() { 
    { 
     append(1, 2); 
     append(10, 20); 
    } 
}; 
Verwandte Themen