Tengo una clase que define un tipo de valor inmutable que ahora necesito serializar. La inmutabilidad proviene de los campos finales que se establecen en el constructor. Intenté serializar y funciona (¿sorprendentemente?), Pero no tengo idea de cómo.¿Cómo deserializa la serialización de java cuando no se especifica ningún constructor predeterminado?
He aquí un ejemplo de la clase
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...
}
Dado que la clase no tiene ningún constructor arg, ¿cómo puede ser instanciada y el conjunto final de campo?
(Un aparte -. Me di cuenta esta clase en particular debido idea no estaba generando una inspección "no serialVersionUID" de advertencia para esta clase, sin embargo, avisos generados con éxito para otras clases que simplemente he hecho serializable)
Pregunta de bonificación: ¿cómo se serializa una instancia de una clase * anonymous *? – ewernli
Supongo que es serializable solo si uno de sus supertipos es serializable y la clase adjunta es serializable. Eso parece tener sentido, pero nadie sabe qué hay en el JLS. – mdma
No es 'nadie adivina qué hay en el JLS'. Está allí para ser leído por cualquiera. – EJP