Votre professeur a raison. Vous ne voulez pas créer aveuglément des getters et setters pour toutes les variables d'instance. Vous voulez les créer là où ils sont requis.
Si vous avez une classe BankAccount
avec une variable d'instance balance
, la création de getters et setters est logique si vous voulez pouvoir vérifier et régler la balance.
Même ici, il y a des informations qui se cachent - sous la forme d'encapsuler l'implémentation. Le getter "double getBalance()
" peut simplement renvoyer la valeur de la variable d'instance sous-jacente s'il s'agit d'un double
, ou renvoyer une valeur dérivée d'un BigDecimal
s'il s'agit du choix d'implémentation de la variable ou s'il peut appeler un site Web distant service et renvoyer le résultat. Ainsi, le getter/setter permet toujours à l'implémentation de varier et donc ne viole pas l'encapsulation (et par extension, ni JavaBeans). Ce que JavaBeans fait pour vous est de définir une interface (getXXX(), setXXX()
) pour obtenir et définir des "propriétés", attributs d'une classe que les utilisateurs voudraient typiquement examiner ou modifier. Si votre classe a des informations qui ne sont pas considérées comme une "propriété", il n'est pas nécessaire de les exposer. Par exemple, supposons que la classe BankAccount
possède une variable d'instance utilisée pour valider les retraits. Si le client n'a pas besoin d'accéder ou de modifier cela, il ne sert à rien de créer un getter ou un setter pour cela.
Réponse rapide: la personne qui m'a dit que "JavaBeans exige des getters et des setters pour tout" avait tort. – Pops