Jak zainicjować static
, niemodyfikowalną instancję z android.util.SparseArray
?Sposób inicjowania statycznego SparseArray
Odpowiedz
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
.
To jest dokładnie to, czego szukałem. Dziękuję Ci! – firyice
Oto lepszy sposób za pomocą anonimowej klasy:
static final SparseIntArray myArray = new SparseIntArray() {
{
append(1, 2);
append(10, 20);
}
};
Działa to dla mnie:
static final SparseIntArray CMyArray = new SparseIntArray();
static {
CMyArray.append(2, 4);
CMyArray.append(8, 3);
CMyArray.append(255, 1);
}
wg: https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
Nie zainicjować właściwości statycznych. Co dokładnie próbujesz zrobić? – Eric
@Erric SparseArray odpowiednik tej odpowiedzi http://stackoverflow.com/a/507658/884677 dla statycznej mapy – firyice
@Eric tak, dokładnie tak, jak stwierdziłem w tym pytaniu, oraz powiązane pytanie/odpowiedź – firyice