java.io.InvalidClassException: aucun constructeur
Quand je lance le programme ci-dessous, je suis une exception, comme le
java.io.InvalidClassException: Files.SerializationMain; Files.SerializationMain; no valid constructor
at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Files.SerializationClass.main(SerializationClass.java:71)
Caused by: java.io.InvalidClassException: Files.SerializationMain; no valid constructor
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Files.SerializationClass.main(SerializationClass.java:61)
J'ai lu quelque part que lorsque nous sérialiser un enfant de la classe puis de sa classe de base constructeur obtient déclenché.
class Parent123
{
int age;
String name;
Parent123(int age,String name) {
System.out.println("We are in Parent123 Constructor");
this.age=age;
this.name=name;
}
}
class SerializationMain extends Parent123 implements Serializable {
int data1;
String data2;
SerializationMain(int data1,String data2)
{
super(20,"test");
this.data1=data1;
this.data2=data2;
}
public void setData1(int data1)
{
this.data1=data1;
}
public void setData2(String data2)
{
this.data2=data2;
}
public String getData2()
{
return data2;
}
public int getData1()
{
return data1;
}
}
public class SerializationClass {
public static void main(String args[])
{
System.out.println("Before Creating Object");
SerializationMain s1=new SerializationMain(10,"Anurag");
try
{
System.out.println("Serializing Object");
FileOutputStream fis=new FileOutputStream("Test.ser");
ObjectOutputStream ois=new ObjectOutputStream(fis);
ois.writeObject(s1);
} catch(Exception e1) {
e1.printStackTrace();
}
try
{
FileInputStream fis=new FileInputStream("Test.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Object o1=ois.readObject();
SerializationMain s2=(SerializationMain)o1;
}
catch(Exception e1)
{
e1.printStackTrace();
}
}
}//End of SerializationClass
- veuillez sélectionner @hey réponse comme correcte.
Vous devez vous connecter pour publier un commentaire.
Ajouter de mise en œuvre de Serializable à la classe parent.
Serializable
dans la classe parent.Serializable
et pasjava.io.Serializable
pour éviter cette erreur 🙂with
au lieu deextends
en Scala. Toutes les contourner ?Il suffit de fournir constructeur par défaut dans les deux classes (Parent & Enfant)
final
champs?Pas, les constructeurs ne sont pas tous appelés si vous utilisez le processus de Sérialisation.
Serializable utilise la réflexion pour construire l'objet et ne nécessite pas d'arg constructeur. Mais Externalizable public de non-arg constructeur.
cependant, vous classe parent peut exiger aucun-arg constructeur.reportez-vous cet article
vous ne seriez pas obtenir cette erreur si vous faites le parent de la classe serializable ou si vous fournissez un public de non-arg constructeur dans la classe parent.