Interface Serializable e Assertions

olá galera,

to dando um gás para fazer a certificação e qestou com algumas dúvidas relacionadas a Serializable e Assertions

[list]Serializable[/list]
Eu li no livro da Katy Sierra (SCJO 5.0 e USE A CABEÇA) que caso um objeto implemente a interface Serializable todas as suas variáveis de instâncias serão “automaticamente” serializadas também.
Mas caso umas das minhas variáveis seja um objeto de outra classe (i.e. A HAS-A B) e supomos que B não implemente a interface Serializable vai gerar um exception (NotSerializableException). A dúvida vem agora: “Porque então ela menciona que vai serializar automaticamente ??”

Eu tava estudando errado a parte de serialização, até que eu implementei e vi que não pode se a classe B também não implementar.
Essa parte automatizar que tinha me dexado confuso.

[list]Assertions[/list]
Eu vi que asserções não podem ser usadas nem para validar argumentos de métodos públicos ou entrada de dados de console.
Mas se caso eu implementar asserção com método público o programa compila normalmente.
Então porque é proibido ??

Muito Obrigado

Ricardo

"

[quote=ricardo13]olá galera,

to dando um gás para fazer a certificação e qestou com algumas dúvidas relacionadas a Serializable e Assertions

[list]Serializable[/list]
Eu li no livro da Katy Sierra (SCJO 5.0 e USE A CABEÇA) que caso um objeto implemente a interface Serializable todas as suas variáveis de instâncias serão “automaticamente” serializadas também.
Mas caso umas das minhas variáveis seja um objeto de outra classe (i.e. A HAS-A B) e supomos que B não implemente a interface Serializable vai gerar um exception (NotSerializableException). A dúvida vem agora: “Porque então ela menciona que vai serializar automaticamente ??”

Ricardo
[/quote]

Então, também estou estudando para certificação é já passei o tópico de serialização…tb tive dificuldade, mais resumi para mim da seguinte forma:

  • A classe tem que implementar Serializable
  • Todo valor dos atributos(mesmo private) vão ser serializados automaticamente
  • Se não quiser serializar algum atributo, utilizar a cláusula transient neste atribudo
  • Se um atributo é uma referência, o objeto apontado por essa será serializado também(Se este objeto tiver implementado a interface Serializable…tudo bem).
    Aqui acho que pode te ajudar
  • Caso o objeto referenciado não implementar Serilizable(e vc não puder mudar isso), há duas opções:
    1) Marcar como como transient esse atribudo que possue a referência
    2) Serializar os valores desse objeto que não podem ser serializado, implementando dois metodos na sua classe:
    writeObject(… e readObject(… pagina 259

De uma forma geral, vejo assim…

A serialização faz tudo sozinha se implementar Serializable…caso tenha que serializar um objeto que não implementa isso, então tem que “pegar” os atributos desse objeto, via getters por exemplo, um por um e implementar sua serialização no método writeObject. Quando deserializar…tem que implementar o método readObject para “pegar” de volta esses atributos, tendo cuidado com a ordem que foram serializados manualmente, e retornar a um novo objetos utilizando setters…

Bom, não sei se ajudei muito…e se estou esquecendo de algo…mais vejo assim.

Até

olá pessoal,

primeiro muito obrigado pelas respostas.

Sobre asserções eu entendi que a Sun somente não recomenda a fazer e não o compilador inibe essa prática (era a alternativa que eu pensava).

Sobre Serializable eu gostei do seu pequeno resumo, mas a principio quando é citado no livro sobre automático, logo vem a idéia de que a classe serializa todas as sua variáveis. Independente de implementar ou não a interface.

Mais uma vez muito obrigado

Ricardo

Ps: aurelio_silva quando você ta pretendo fazer a prova de certificação ???

[quote=ricardo13]

Ps: aurelio_silva quando você ta pretendo fazer a prova de certificação ???[/quote]

Marquei para semana que vem, dia 14/10…vou acabar de ler o livro da Kathy esta sexta feira, dai faço todos os exercicios do livro de novo e depois o simulado do livro…cara tem que dar certo porque quarta feira dia 15/10 começo a trabalhar…rsrsr

Vamos ver, estou um pouco apreensivo… :shock:

"

bom cara,

eu desejo a vc boa sorte.
E pode dexar que vai dar tudo certo.

Não esquece de comentar como foi na prova. Mandando as dicas pra gente.

Um abraço e estarei torcendo por vc

Ricardo

Obrigado,

Pode deixar, com sucesso :smiley: ou não :frowning: (Deus me livre…rsrrsr) vou comentar aqui…

Até

Olá Galera,

Surgiu outra dúvida com Serializable.

O que acontece quando eu tenho uma classe que implementa a interface e a superclasse não implementa. Então eu serializo a subclasse e deserializo novamente. Eu queria saber se quando deserializa é executado o construtor da classe pai ???

class A { }

class B extends A implements Serializable {
  public static void main(String[] args) {
 
  B b1 = new B();

  // Aqui executa o código de serialização de A
  // Aqui executa o código de deserialização de B
  B b2 = (B) readObject(blá);  // nesse momento, quando atribuo um objeto a b2 é executado o construtor pai A ???
  }

}

Muito Obrigado

Ricardo

ei dar uma olhada sobre Serialização, veja se pode ajudar! flw!

Assertions
:smiley:

olá Camilo,

Antes de vc responder eu tinha buscado no google e saiu seu site…dai acabei dando uma lida no seu post de Serialização.

Muito Obrigado pela força

Ricardo

nem sabia que estava aparecendo assim de imedaito no google :smiley: