Estou lendo o livro da Kathy para a SCJP e fiquei com uma duvida na parte de Serializable…
De acordo com o livro, se uma classe não implementa a interface Serializable deveria ocorrer uma exceção do tipo java.io.NotSerializableException com a classe Collar, mas quando fui testar a classe abaixo ela compilou e executou normalmente…
Porque isso acontece?
Eu executei o código no Netbeans e a resposta foi essa:
Exception in thread "main" java.io.NotSerializableException: javaapplication1.Collar
before: collar size is 3
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at javaapplication1.NewClass3.main(NewClass3.java:22)
Java Result: 1
C:\Users\Vingdel\Desktop>java SerializeDog
before: collar size is 3
Exception in thread “main” java.io.NotSerializableException: Collar
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at SerializeDog.main(SerializeDog.java:12)[/code]
Mesmo 2 anos depois do ultimo comentário, como passei pelo mesmo erro, queria apenas postar uma ideia de solução.
Eu estava tendo o mesmo problema e simplemeste separei as classes em arquivos, de tal forma que as classes não sejam internas à que testa a serialização.
Dog.java uma classe em um arquivo separado.
O mesmo para Collar.class, outra classe em outro arquivo separado.
[quote=lsouza13]
Mesmo 2 anos depois do ultimo comentário, como passei pelo mesmo erro, queria apenas postar uma ideia de solução.
Eu estava tendo o mesmo problema e simplemeste separei as classes em arquivos, de tal forma que as classes não sejam internas à que testa a serialização.
Dog.java uma classe em um arquivo separado.
O mesmo para Collar.class, outra classe em outro arquivo separado.
Com isto meu problema foi solucionado.
Valeu[/quote]
Bela ressuscitada de tópico… rsrsrs
Quanto a erro isso acontece por que ao serializar o estado de um objeto este processo obrigada as classes a serem serializada a implementar a interface java.io.Serializable,
independente das classes esta ou não no mesmo arquivo.