2013-05-05 10 views
7

Come è possibile inizializzare una static, istanza non modificabile di android.util.SparseArray?Come inizializzare uno SparseArray statico

+1

Non inizializzare le proprietà statiche. Cosa stai cercando di fare esattamente? – Eric

+1

@Eric l'equivalente SparseArray di questa risposta http://stackoverflow.com/a/507658/884677 per una mappa statica – firyice

+1

@Eric sì, esattamente come ho dichiarato in questa domanda e la domanda/risposta collegata – firyice

risposta

6

Non puoi fare ciò che stai tentando di fare. Almeno, non come stai tentando di farlo. Non esiste un'implementazione di SparseArray che non sia modificabile.

Tuttavia, è possibile crearne uno. Ecco come:

  • creare una classe, dicono CustomSparseArray<E>, e farlo estendere SparseArray.
  • Override tutti i metodi che cambiano gli elementi dell'array, e sostituirli con qualcosa di simile:

    @Override 
    public void append(int key, E value) { 
        if (mLocked) 
         return; // Maybe throw an exception 
        super.append(key, value); 
    } 
    
  • Quindi, aggiungere in una variabile membro alla classe, boolean mLocked = false;.
  • Successivamente, è necessario un metodo come il seguente:

    public void lock() { mLocked = true; } 
    
  • Infine, implementare la variabile statica utilizzando un metodo simile a quello 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(); 
        } 
    } 
    

Quindi si dispone di un immodificabile SparseArray nella variabile staticmyArray.

+0

Questo è esattamente quello che stavo cercando. Grazie! – firyice

15

Ecco un modo migliore utilizzando una classe anonima:

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