Wie man eine innere Klasse parzellierbar macht

8

Ich muss wissen, wie man eine innere Klasse Parcelable macht, so dass Objekte ihres Typs über AIDL an einen entfernten Dienst weitergegeben werden können. Ich kann dazu keine Informationen finden.

Hier ist ein Beispielcode von dem, was ich zu erreichen versuche, aber er kompiliert nicht, weil der CREATOR in der Bar-Klasse nicht statisch sein kann (dh weil er in einer inneren Klasse ist). Ich kann Bar nicht zu einer statischen inneren Klasse machen und ich kann Bar nicht außerhalb der Foo-Klasse bewegen (andere Abhängigkeiten innerhalb des Systems). Ich muss auch wissen, wie ich die Bar-Klasse aus einer AIDL-Datei referenzieren würde. Jede Hilfe wird sehr geschätzt.

%Vor%     
MichaelL 27.01.2012, 00:27
quelle

4 Antworten

8

Ich bin kürzlich auf dasselbe Problem gestoßen und habe die innere Klasse in meiner Situation statisch gemacht.

Ich habe gelesen, warum das funktionieren würde und es macht mehr Sinn für mich, also dachte ich, ich würde es teilen. Eine innere Klasse ist eine Klasse, die in einer anderen Klasse verschachtelt ist und einen Verweis auf eine Instanziierung ihrer enthaltenen Klasse hat. Durch diese Referenz kann auf die enthaltenen Klassenmitglieder zugegriffen werden, als wäre es die enthaltende Klasse selbst. Daher ist es an eine Instanz der enthaltenden Klasse gebunden und kann daher keine statischen Member haben (da sie nicht an die enthaltene Klasse gebunden wären).

Wenn die verschachtelte Klasse als statisch deklariert wird, wird sie von einer Instanz der enthaltenden Klasse getrennt und kann daher ihre eigenen statischen Variablen haben (und was immer sonst eine reguläre Klasse haben kann). Natürlich wird es nicht möglich sein, auf Mitglieder der enthaltenden Klasse zuzugreifen.

    
Aaron Taggart 14.01.2014 18:05
quelle
3

Die Antwort ist, dass eine innere Klasse immer in eine eigene Klasse umgewandelt werden kann. Welche Funktionalität die innere Klasse auch von der Instanz der Fremdklasse oder umgekehrt haben muss, kann immer über eine Schnittstelle oder eine öffentliche API erfolgen. Versuchen Sie, Bar zu einer eigenen Klasse zu machen. Für welche Komponenten von Foo Bar Sie sich auch entscheiden müssen, geben Sie die Instanz von Foo in Bar und implementieren Sie die entsprechende API.

    
John B 27.01.2012 00:50
quelle
1

Wenn Ihre äußere Klasse einen Verweis auf die inneren Klassen-Instanzen behält, können Sie dies folgendermaßen tun:

%Vor%     
Taig 02.12.2012 19:28
quelle
0

Ihre Leiste muss nicht paketfähig sein. Sie können nur Bar-Felder zusammen mit Foo-Feldern speichern und das gesamte Objekt in createFromParcel(Parcel) method wiederherstellen.

Hier ist ein Beispielcode:

%Vor%     
GV_FiQst 07.09.2017 14:05
quelle