I understand Enum
is Serializable. Hence, it is safe to do so. (selectedCountry is enum Country
)
Original enum without customer member variables
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);
}
However, what if I have non-serializable members in custom enum class? For instance,
Original enum customer member variables
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;
}
I tested. It works. (I tested by printing out all the value of member variables before and after serialization. They are same before and after)
However, I do not understand why it works? As I do not provide proper readObject
and writeObject
, as required by Serializable
interface.
As pointed in Effective Java Item 75: Consider using a custom serialized form, do I need to provide my own readObject
and writeObject
, if I have custom member variables in my enum?