[RESOLVIDO] Serializable

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?

[code] import java.io.*;

public class SerializeDog {
public static void main(String[] args) throws Exception{
Collar c = new Collar(3);
Dog d = new Dog(c, 5);

	System.out.println("before: collar size is " + d.getCollar().getCollarSize());
	
	FileOutputStream fs = new FileOutputStream("testSer.ser"); 	//FileNotFoundException
	ObjectOutputStream os = new ObjectOutputStream(fs); 		//IOException
	os.writeObject(d);											//IOException
	os.close();													//IOException		
	
	FileInputStream fis = new FileInputStream("testSer.ser");	//FileNotFoundException
	ObjectInputStream ois = new ObjectInputStream(fis);			//IOException
	d = (Dog) ois.readObject();									//java.lang.ClassNotFoundException
	ois.close();												//IOException
				
	System.out.println("after: collar size is " + d.getCollar().getCollarSize());
}

}

class Dog implements Serializable{
private Collar theCollar;
private int dogSize;

public Dog(Collar collar, int size){
	theCollar = collar;
	dogSize = size;
}

public Collar getCollar(){
	return theCollar;
}

}

class Collar{
private int collarSize;
public Collar(int size){
collarSize = size;
}

public int getCollarSize(){
	return collarSize;
}

}[/code]

Olá,

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

Deve ter algo de errado ai entao. Gera exceçao.

Super estranho… vou ver aqui, valew

Compila, mas não executa…

[code]C:\Users\Vingdel\Desktop>javac SerializeDog.java

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]

Abraço!

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=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.