2013-05-05 19 views

Odpowiedz

6

Nie możesz zrobić tego, czego próbujesz. Przynajmniej nie tak, jak próbujesz to zrobić. Nie ma implementacji SparseArray, która jest niemodyfikowalna.

Można go jednak utworzyć. Oto jak:

  • Tworzenie klasy, powiedzmy CustomSparseArray<E>, i rozciągać SparseArray.
  • Zastąp wszystkie metody które zmieniają elementy w tablicy, a następnie je zastąpić czymś tak:

    @Override 
    public void append(int key, E value) { 
        if (mLocked) 
         return; // Maybe throw an exception 
        super.append(key, value); 
    } 
    
  • Następnie dodać w zmiennej członka do klasy boolean mLocked = false;.
  • Następnie trzeba metodę jak następuje:

    public void lock() { mLocked = true; } 
    
  • Wreszcie wdrożyć zmiennej statycznej stosując metodę podobną do w 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(); 
        } 
    } 
    

to masz niezmodyfikowana SparseArray w Twojej static zmienna myArray.

+0

To jest dokładnie to, czego szukałem. Dziękuję Ci! – firyice

15

Oto lepszy sposób za pomocą anonimowej klasy:

static final SparseIntArray myArray = new SparseIntArray() { 
    { 
     append(1, 2); 
     append(10, 20); 
    } 
}; 
Powiązane problemy