Dies ist eine allgemeine JAVA-Frage. In android gibt es eine Schnittstelle Parcelable
:
Dies ist ein Beispiel in der offiziellen Dokumentation :
%Vor% Wir müssen die 2 Funktionen describeContents()
und writeToParcel
implementieren.
(Problem)
Außerdem müssen wir die Schnittstelle Parcelable.Creator<T>
als statisches Feld namens CREATOR implementieren.
Alles ist eigentlich geradlinig. Jetzt möchte ich eine generische Klasse mit einem Parcelable Class Type erstellen:
%Vor% Ich kann Parcelable implementieren. Ich kann die Funktion T
von writeToParcel
aufrufen. Ich kann jedoch nicht auf das statische CREATOR-Feld zugreifen.
Anstelle von <T extends Parcelable>
benötigen Sie <T extends ShushContainer<T> & Parcelable>
, so dass Sie angeben, dass T
ist ShushContainer
, so dass Sie auf Methoden und Variablen zugreifen können.
Hier ist das Beispiel mit Serializable
Aktualisieren
Wenn ich richtig verstehe, ist eine andere Klasse, die Parcelable
implementiert, die CREATOR
hat
Sie versuchen dynamischen Polymorphismus für statische Variablen, was nicht möglich ist.
Beispiel, um zu zeigen, wie es scheitert
%Vor% Dieses Programm schlägt fehl, da statische Felder an die Klasse und nicht an die Instanz gebunden sind. Daher gibt es zwei separate count
one für Base
und eine für Child
, wenn Sie auf den Wert von Base
zugreifen.
Sie können reflection verwenden, um zu überprüfen, ob das CREATOR
-Feld vorhanden ist und darauf zugreifen. Dies ist ohne Objekt oder Klassenobjekt nicht möglich.
Oder Sie können etwas wie unten mit TypeToken
%Vor%