Comment fonctionne la sérialisation java désérialiser final champs lorsque aucun constructeur par défaut spécifié?

J'ai une classe définissant une valeur immuable type que j'ai maintenant besoin de sérialiser. L'immutabilité vient de la finale de champs qui sont définis dans le constructeur. J'ai essayé de la sérialisation, et il fonctionne (étonnamment?) - mais je n'ai aucune idée de 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'ont pas non arg constructeur, comment peut-il être instancié et la finale de champ?

(Un côté - j'ai remarqué cette classe, en particulier parce que l'IDÉE n'était pas de la génération d'un "pas de serialVersionUID" inspection avertissement pour cette classe, pas encore réussi à produire des mises en garde pour les autres classes que je viens de sérialisable.)

InformationsquelleAutor mdma | 2010-05-25