1. Implementação Simples, Consequências Complexas
- Basta adicionar implements Serializable para tornar uma classe serializável.
- Serializar uma classe pode ter custos significativos a longo prazo.
2. Impacto na Evolução da Classe
Uma vez serializável, sua forma serializada se torna parte da API pública.
Alterações internas podem quebrar a compatibilidade com versões anteriores.
É possível manter compatibilidade manualmente (ObjectOutputStream.putFields e ObjectInputStream.readFields), mas é complexo.
3. Problemas com serialVersionUID
- Cada classe serializável tem um identificador único (serialVersionUID).
- Se não for especificado manualmente, o compilador o gera automaticamente.
- Qualquer alteração na classe pode mudar esse ID, quebrando a compatibilidade e gerando InvalidClassException.
4. Riscos de Segurança
- Serialização ignora construtores e pode burlar restrições da linguagem.
- Objetos podem ser criados com valores inválidos ou permitir acesso não autorizado.
- Dependência da desserialização padrão pode resultar em vulnerabilidades (ver Item 88).
5. Aumento na Complexidade de Testes
- Classes serializáveis precisam ser testadas entre diferentes versões.
- Quanto mais classes serializáveis, maior a matriz de testes necessária.
- Formas serializadas mal planejadas dificultam a evolução do código.
6. Quando Serializar é Necessário
Essencial para frameworks que exigem serialização.
Útil em classes de valor (BigInteger, Instant) e coleções.
Classes que representam processos ativos (ThreadPool) geralmente não devem ser serializáveis
7. Serialização e Herança
- Classes projetadas para herança geralmente não devem ser serializáveis.
- Interfaces raramente devem estender Serializable, pois impõem um fardo extra a implementações futuras.
- Exceções notáveis: Throwable (para propagação de exceções via RMI) e Component (para GUIs no Swing/AWT).
8. Problemas com Classes Internas
- Classes internas não devem ser serializáveis devido a campos sintéticos não especificados.
- Classes membros estáticas podem implementar Serializable.
9. Alternativas à Serialização
- Usar o padrão proxy de serialização (Item 90) para maior controle.
- Utilizar formatos como JSON ou XML para persistência e transmissão.
Top comments (0)