Come è possibile inizializzare una static
, istanza non modificabile di android.util.SparseArray
?Come inizializzare uno SparseArray statico
risposta
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 estendereSparseArray
. 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 static
myArray
.
Questo è esattamente quello che stavo cercando. Grazie! – firyice
Ecco un modo migliore utilizzando una classe anonima:
static final SparseIntArray myArray = new SparseIntArray() {
{
append(1, 2);
append(10, 20);
}
};
Questo funziona per me:
static final SparseIntArray CMyArray = new SparseIntArray();
static {
CMyArray.append(2, 4);
CMyArray.append(8, 3);
CMyArray.append(255, 1);
}
secondo: https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
Non inizializzare le proprietà statiche. Cosa stai cercando di fare esattamente? – Eric
@Eric l'equivalente SparseArray di questa risposta http://stackoverflow.com/a/507658/884677 per una mappa statica – firyice
@Eric sì, esattamente come ho dichiarato in questa domanda e la domanda/risposta collegata – firyice