Generische Klasse mit Einschränkungsproblemen

8

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.

%Vor%     
Sherif elKhatib 26.09.2012, 12:13
quelle

2 Antworten

1

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.

%Vor%

Hier ist das Beispiel mit Serializable

%Vor%

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%     
Amit Deshpande 26.09.2012 12:52
quelle
0

Dies beantwortet nicht Ihre Frage, wie Sie auf die statische CREATOR-Eigenschaft zugreifen, jedoch müssen Sie nicht auf diese Eigenschaft zugreifen, die Parcelable implementiert. Siehe unten zum Beispiel:

%Vor%     
Bulwinkel 20.08.2015 08:51
quelle

Tags und Links