Questa è una domanda generale di JAVA. In androide, v'è un'interfaccia Parcelable
:Classe generica con problema di accesso con vincoli
Questo è un esempio all'interno del official documentation:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
Siamo tenuti per implementare le funzioni describeContents()
2 e writeToParcel
.
(problema) Oltre a loro, si devono inoltre implementare l'interfaccia Parcelable.Creator<T>
come un campo statico chiamato CREATOR.
Tutto è davvero semplice. Ora voglio creare una classe generica che ha un Parcelable Classe Tipo:
public class ShushContainer<T extends Parcelable> implements Parcelable
sono in grado di implementare Parcelable. Posso chiamare la funzione di . Tuttavia, non riesco ad accedere al campo CREATORE statico.
public class ShushContainer<T extends Parcelable> implements Parcelable {
Vector<T> items;
String someField;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(someField);
dest.writeInt(items.size());
for(int i=0;i<items.size();i++)
items.get(i).writeToParcel(dest, flags);
}
public ShushContainer(Parcel in) {
someField = in.readString();
int size = in.readInt();
for(int i=0;i<size;i++)
//this does not work
items.add(T.CREATOR.createFromParcel(in));
}
public static final Parcelable.Creator<ShushContainer> CREATOR = new Parcelable.Creator<ShushContainer>() {
public ShushContainer createFromParcel(Parcel in) {
return new ShushContainer(in);
}
public ShushContainer[] newArray(int size) {
return new ShushContainer[size];
}
};
}
T è un'altra classe che implementa Parcelable. –
Quindi come può quella classe avere 'CREATOR' perché è definita in ShushContainer. Questa variabile appartiene solo a questa classe. Semplicemente usalo perché hai bisogno di T.CREATOR Usa semplicemente CREATOR –
Nopes ShushContainer implementa Parcelable e ha il suo CREATORE. T implementa anche Parcelable e ha il suo CREATORE. È questo CREATORE a cui non riesco ad accedere. –