Galéra segue a seguinte questão que encontrei em um simulado:
class Car implements Serializabel{}
class Ford extends Car{}
Caso vc tente serializar uma instância de Ford qual será o resultado?
A) Ocorrerá erro de compilação. B) Nenhum objeto será serializado.
C) Dois objetos serão serializados.
D) Uma exeção será lançada, em tempo de execução.
A resposta correta é a letra B.
A minha resposta foi a letra C.
A justificação do livro foi a segunte: A subclasse não tem que serializar se a superclasse o fizer.
Isso eu já sabia mas galerá vcs não acham que o livro ta errado na escolha da letra B? A resposta correta pra mim ainda seria a letra C.
Quando vocÊ serializa um objeto em java, você serializa na verdade os valores que os seus atributos de instância não marcados como transient tinham no momento da serialização, essa classe Car e Ford, embora indiquem ao compilador que podem ser serializadas, implementando a interface java.io.Serializable, não possuem nenhum atributos de instancia a ser persistido, por isso, a resposta B é correta.
S
sergiotaborda
A resposta correta deveria ser “um objeto é serializado” que não consta das opções.
Mesmo que o objeto não tenha estado ele será serializado. Afinal, serializar não escreve apenas os atributos mas tb o nome da classe. E todos os objetos têm um classe.
Faça a experiência com código. Crie essas classes e serialize o objeto. Não ha razão para não funcionar.
G
gilberto.souza
Eu entendi a questão no ponto de vista do que é o objetivo da serialização, que é manter o estado do objeto, quando você não tem um estado a ser mantido, você não tem um estado a ser recuperado.
G
gilberto.souza
sergiotaborda , quantos objetos foram serializados nesse exemplo, nenhum, a única coisa que foi serializadas são as meta informações da classe.l
R
Raff
eu vou com o sergio não tem nada a ver o que o gilberto falo !
R
Raff
neste exemplo significa que car é Serializable e ford extends Car, logo Ford é Serializable ! Então quando serializar um Objecto Ford somente um Objecto Será serializado !!!
R
Raff
When you serialize an instance of Cow, how many objects will be serialized?
nesse codigo anderson ve se voce consegue saber quantos objectos serão serializados ???
T
thingol
importjava.util.*;importjava.io.*;classCarimplementsSerializable{}classFordextendsCar{}/** * A saída deste programa é:Lido um objeto da classe FordNão há mais objetos para serem desserializados. * Isto indica que apenas um objeto foi serializado. */classObjetosSerializados{publicstaticvoidmain(String[]args)throwsException{ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("objeto.bin"));oos.writeObject(newFord());oos.close();ObjectInputStreamois=newObjectInputStream(newFileInputStream("objeto.bin"));Objectobj;try{while((obj=ois.readObject())!=null){System.out.println("Lido um objeto da classe "+obj.getClass().getName());}}catch(EOFExceptionex){System.out.println("Não há mais objetos para serem desserializados.");}ois.close();}}
A
anderson.bonavides
Raff:
When you serialize an instance of Cow, how many objects will be serialized?
nesse codigo anderson ve se voce consegue saber quantos objectos serão serializados ???
Minha resposta foi 6. Primeiro é serializado Milk ai segue 3 instancias de SaturatedFat seguido pelo próprio COW e por fim Animal.
A
anderson.bonavides
thingol:
importjava.util.*;importjava.io.*;classCarimplementsSerializable{}classFordextendsCar{}/** * A saída deste programa é:Lido um objeto da classe FordNão há mais objetos para serem desserializados. * Isto indica que apenas um objeto foi serializado. */classObjetosSerializados{publicstaticvoidmain(String[]args)throwsException{ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("objeto.bin"));oos.writeObject(newFord());oos.close();ObjectInputStreamois=newObjectInputStream(newFileInputStream("objeto.bin"));Objectobj;try{while((obj=ois.readObject())!=null){System.out.println("Lido um objeto da classe "+obj.getClass().getName());}}catch(EOFExceptionex){System.out.println("Não há mais objetos para serem desserializados.");}ois.close();}}
Thingol percebi que seu código gerou uma exceção e vc capiturou ela. Pq gerou essa exceção?
gilberto.souza:
sergiotaborda , quantos objetos foram serializados nesse exemplo, nenhum, a única coisa que foi serializadas são as meta informações da classe.l
Eu entendi o que vc falou, vc quiz dizer que não tem nenhuma variavel que foi serializada para depois ser recuperada.
gilberto.souza:
Quando vocÊ serializa um objeto em java, você serializa na verdade os valores que os seus atributos de instância não marcados como transient tinham no momento da serialização, essa classe Car e Ford, embora indiquem ao compilador que podem ser serializadas, implementando a interface java.io.Serializable, não possuem nenhum atributos de instancia a ser persistido, por isso, a resposta B é correta.
Gilberto pelo que eu entendi vc quiz dizer que será serializado nenhum valor que não seja marcado como transitiend que a classe pode ter, mas que será serializado uma instancia da classe Ford. Estou correto na conclusão que tirei?
Essá questão não é tão boba o quanto parece.
R
Raff
anderson na verdade são 5 objetos !!!
R
Raff
a Pergunta é a seguinte cara : quantos objectos serão serializados quando um objecto Cow será serializado.
Resposta : Quando você serializar um Object Cow, Cow implementa Serializable , Cow tbm tem - um Milk e Milk tbm é Serilizable, mas ainda a história continua pois Milk tem 3 instancia de SaturatedFat. Logo 5 objetos serão Serializable
A
anderson.bonavides
Raff:
a Pergunta é a seguinte cara : quantos objectos serão serializados quando um objecto Cow será serializado.
Resposta : Quando você serializar um Object Cow, Cow implementa Serializable , Cow tbm tem - um Milk e Milk tbm é Serilizable, mas ainda a história continua pois Milk tem 3 instancia de SaturatedFat. Logo 5 objetos serão Serializable
É eu me esqueci que a classe animal neste caso não entra na serealização e que nenhuma informação da classe vai ser serializada. Diferentemente de Cow.
R
Raff
anderson conseguiu entender cara ?
A
anderson.bonavides
Bem se minha ultima resposta colocada tiver certa então eu entendi.
S
sergiotaborda
gilberto.souza:
sergiotaborda , quantos objetos foram serializados nesse exemplo, nenhum, a única coisa que foi serializadas são as meta informações da classe.l
Errado. Se vc serializar dois objetos sem atributos da mesma classe as metainformações são incluidas no stream duas vezes. Vc está serializando o objeto, não a classe. Por isso que quando A extends B e serializa A , vc serializa apenas A e nunca não B. O exemplo do tingol demonstra exactamente isto.
não ha porque ter duvidas em serialização. Apenas faça uma serialização e veja o que acontece.