Je comprends Enum
est Serializable. Par conséquent, il est sûr de le faire. (selectedCountry est enum Country
)
Enum original sans variable membre client
public enum Country {
Australia,
Austria,
UnitedState;
}
Fragment
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
selectedCountry = (Country)savedInstanceState.getSerializable(SELECTED_COUNTRY_KEY);
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable(SELECTED_COUNTRY_KEY, selectedCountry);
}
Cependant, que se passe-t-il si j'ai des membres non sérialisables dans une classe d'enum personnalisée ? Par exemple,
Variables membres de l'enum original customer
package org.yccheok;
import org.yccheok.R;
/**
*
* @author yccheok
*/
public enum Country {
Australia(R.drawable.flag_au),
Austria(R.drawable.flag_at),
UnitedState(R.drawable.flag_us);
Country(int icon) {
this.icon = icon;
nonSerializableClass = new NonSerializableClass(this.toString());
}
public int getIcon() {
return icon;
}
public static class NonSerializableClass {
public NonSerializableClass(String dummy) { this.dummy = dummy; }
public String dummy;
}
private final int icon;
public NonSerializableClass nonSerializableClass;
}
J'ai testé. Cela fonctionne. (J'ai testé en imprimant toutes les valeurs des variables membres avant et après la sérialisation. Elles sont identiques avant et après)
Cependant, je ne comprends pas pourquoi cela fonctionne ? Comme je ne fournis pas de readObject
y writeObject
conformément aux dispositions de la Serializable
interface.
Comme indiqué dans Effective Java Point 75 : envisager l'utilisation d'un formulaire personnalisé sérialisé dois-je fournir mes propres readObject
y writeObject
si j'ai des variables membres personnalisées dans mon enum ?
0 votes
Que voulez-vous dire par "ça marche" ? Quel test avez-vous effectué ?