SerialVersionUID

4 respostas
andbecker

Alguém sabe pra quer serve a linha:

private static final long serialVersionUID = 1L;

encontro ela em alguns códigos e não sei pra que serve.

4 Respostas

E
A

Bom, vou dizer o que eu sei agora sobre isso. Desde o java 1.5, o eclipse reclama que classes que são serializáveis devem especificar esse serialVersionUID.

Eu não fui à fundo, mas consigo entender pra que isso serve: no java, as classes são serializáveis. Isso significa que você consegue gravar o estado da classe java e mandar para algum lugar, por exemplo, para um arquivo, ou até para a internet. O J2EE utiliza isso adoidado…

Aí, como funciona essa serialização? O java pega os campos da sua classe e grava eles: Por exemplo, nessa classe:

class Agenda { String nome; String endereço; String telefone; }

Ele gravaria as strings do nome, do endereço e do telefone.

Mas, vamos supor que eu coloque um campo extra nessa classe: digamos, o CEP. Agora eu tenho duas versões rolando por aí, certo? Se eu gravei dados antigos, que não tinham o CEP, e for tentar lê-los de volta, o java pode reclamar “Opa! Cadê o telefone dessa classe?”

Aí que entra o serialVersionUID: Na versão 1, da minha classe:

class Agenda { private long serialVersionUID = 1L; String nome; String endereço; String telefone; }

Aí mudei a versão:

class Agenda { private long serialVersionUID = 2L; String nome; String endereço; String telefone; String cep; }

E aí posso usar essa informação em rotinas de desserialização para saber se estou mexendo com classes antigas ou novas…

Para mais informações, puxei no google e cliquei no “estou com sorte”: http://blog.caelum.com.br/entendendo-o-serialversionuid/

andbecker

obrigado pelas informações!!

ricardoarrigoni

Dá uma olhada nesse artigo que vai ajudar Entendendo SerialVersionUID em Java

Criado 27 de julho de 2011
Ultima resposta 4 de set. de 2013
Respostas 4
Participantes 4