Serializable

Para que serve a implementação da interface “Serializable” em um bean???

Ainda não consegui entender direito o efeito que isso causa em um bean, usado em uma JSP por exemplo…

ela eh uma interface que serve como “tag”, idicando que os objetos dessa classes podem ser transformados em um pedaco de codigo binario, e pode ser relida em outro lugar, restaurando o objeto original

acho que num jsp voce nao tem mta utilizade pra ele nao

Ueba!

Eu demorei muito pra entender porque eles inventaram uma interface Serializable, uma vez que vc não precisa implementar nenhum método dela. Ou seja, se os ObjectXXXStreams conseguem ler qualquer objeto, pra que eles querem uma interface?

Á primeira vista, a resposta não parece convincente: eles querem que você saiba o que está fazendo. Repare que todos os objetos que guardam dados são seriáveis (essa é a tradução : )): Integer, as collections, alguns eventos…

Se uma classe sua implementa Serializable, vc atesta saber o que está fazendo. Membros seriáveis da sua instância serão enviados junto com ela, a menos que vc os declare “transient”. Pode ser o caso de um membro que guarda a hora local (que deve ser diferente no lugar/momento em que ele for lido), ou um número de porta de um socket, sei lá.

Normalmente, vc não deve implementar nada para realizar o processo de escrita e leitura. Mas há casos raros em que você quer especificar direitinho como ler um objeto. Por exemplo, você pode querer colocar um cabeçalho no arquivo, ou ler seu objeto de maneira diferente dependendo da plataforma que roda debaixo da sua VM. Nesse caso, vc tem que implementar os métodos abaixo:

public void readObject(ObjectInputStream is) {
   // lê seu objeto a partir do stream
}
public void writeObject(ObjectOutputStream os) {
  // escreve seu objeto no stream
}

Dentro do readObject, vc está num momento de pós-construção, e pode tratar membros como vc faz num construtor. Vc deve tomar cuidado ao chamar métodos que possam ser sobrecarregados, ou pode acontecer um efeito interessante: um método da subclasse ser executado antes que a superclasse tenha inicializado o objeto corretamente!

Num Bean é importante implementar essa interface pois do contrário vc não pode oferecer persistência a ele: um objeto que não implementa Serializable não serve como argumento para o método writeObject() do ObjectOutputStream, vc vai receber uma exceção, algo como “ei, vc não sabe o que está fazendo!” JavaBeans não são considerados brinquedo, ou seja, ao contrário dos objetos ordinários do Java, um Bean deve SEMPRE prever sua seriação. Assume-se que o criador do bean provavelmente vai querer a implementação padrão de leitura, o que é verdade.

um caso pra usar os xxxObject que o duke falou, eh quando voce precisa, impreterivelmente, tambem seriar as variáveis static. vai ficar milhares de copias, mas fazer o que?

bem que valores static e transient, sao bem utilizados quando você pode deduzi-los através de todos os objetos instanciados daquela classe, ou se forem constantes, claro.

Melhor explicado que isso impossível!!!

:stuck_out_tongue: :stuck_out_tongue: :smiley:

da uma olhada nesse link aew explica o porque a classe bean utiliza a interface serializable
http://www.suapostila.hpg.ig.com.br/apostilas/jsp_javabeans.pdf