J'ai une classe définissant un type de valeur immuable que je dois maintenant sérialiser. L'immutabilité vient des champs finaux qui sont définis dans le constructeur. J'ai essayé de sérialiser, et ça fonctionne (étonnamment?) - mais je n'ai aucune idée comment.
Voici un exemple de la classe
public class MyValueType implements Serializable
{
private final int value;
private transient int derivedValue;
public MyValueType(int value)
{
this.value = value;
this.derivedValue = derivedValue(value);
}
// getters etc...
}
Étant donné que la classe n'a pas de constructeur sans argument, comment peut-elle être instanciée et le champ final être défini?
(Au fait - j'ai remarqué cette classe en particulier parce qu'IDEA ne générait pas d'avertissement "pas de serialVersionUID" pour cette classe, alors qu'il a généré avec succès des avertissements pour d'autres classes que je viens de rendre sérialisables.)