Wie kann ich eine static
, nicht änderbare Instanz von android.util.SparseArray
initialisieren?So initialisieren Sie ein statisches SparseArray
Antwort
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 esSparseArray
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
.
Genau das habe ich gesucht. Vielen Dank! – firyice
Hier ist ein besserer Weg, eine anonyme Klasse mit:
static final SparseIntArray myArray = new SparseIntArray() {
{
append(1, 2);
append(10, 20);
}
};
Dies funktioniert für mich:
static final SparseIntArray CMyArray = new SparseIntArray();
static {
CMyArray.append(2, 4);
CMyArray.append(8, 3);
CMyArray.append(255, 1);
}
Stand: https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
Sie haben keine statischen Eigenschaften initialisieren. Was genau versuchst du zu tun? – Eric
@Eric das SparseArray Entsprechung dieser Antwort http://Stackoverflow.com/a/507658/884677 für eine statische Karte – firyice
@Eric ja, genau wie ich in dieser Frage, und die verknüpfte Frage/Antwort – firyice