Por que campos transient são necessários em Java e como funcionam na serialização?
Olá a todos! Estou aprendendo Java e me deparei com o modificador `transient` para campos de classe. Li a documentação, mas não entendi completamente para que ele serve.
Tenho uma classe de usuário simples:
```java
public class User implements Serializable {
private String username;
private String password;
private int age;
// getters e setters
}
```
Quando serializo um objeto desta classe em um arquivo, quero salvar username e age, mas não quero salvar password — são dados confidenciais! Tentei simplesmente não escrever password manualmente, mas na desserialização o campo password fica `null`, o que quebra a lógica de autenticação.
Perguntas:
1. Como excluir corretamente password da serialização, para que após a desserialização eu possa restaurá-lo (por exemplo, de outra fonte)?
2. Por que não posso simplesmente usar `static` ou tornar o campo temporário?
3. Existem armadilhas ao usar `transient` com collections ou objetos aninhados?
Ficarei grato por exemplos de código.