Quatro desvantagens que posso pensar:
- Se você deseja ter uma forma somente leitura e mutável da mesma entidade, um padrão comum é ter uma classe imutável Entity que expõe somente acessadores com variáveis de membro protegidas e, em seguida, criar um MutableEntity que estende e adiciona setters. Sua versão impede isso.
- O uso de getters e setters adere à convenção JavaBeans. Se você quiser usar sua classe como um bean em tecnologias baseadas em propriedade, como JSTL ou EL, precisará expor public getters.
- Se você quiser alterar a implementação para derivar os valores ou procurá-los no banco de dados, será necessário refatorar o código do cliente. Uma abordagem acessadora / mutadora permite que você apenas altere a implementação.
- Menos espanto - quando vejo variáveis de instância públicas, eu imediatamente procuro por quem pode estar sofrendo uma mutação e me preocupo se estou abrindo a caixa de Pandora porque o encapsulamento está perdido. link
Dito isto, a sua versão é definitivamente mais concisa. Se esta fosse uma classe especializada que é usada apenas dentro de um pacote específico (talvez o escopo do pacote seja uma boa idéia aqui), então eu posso considerar isso para one-offs. Mas eu não iria expor grandes APIs como esta.