Em Java, por convenção, getter e setter para campos booleanos serão isField()
e setField()
. Isso funciona perfeitamente bem com nomes de campos que são adjetivos como active
, visible
, closed
, etc.
Mas como nomeio um campo com significado de verbo, como haveChildren
? Adicione "_ing" ao verbo ( ), talvez?havingChildren
Para esclarecer, não tenho controle dos nomes dos métodos (getter e setter), pois eles são gerados automaticamente pelo IDE. Então, o que eu preciso é de um nome de campo apropriado para que, quando o IDE gerar um getter para ele, faça sentido. Por exemplo, hasChildren
é um nome de campo perfeito, mas quando o IDE gerar o getter para o campo, ele seria isHasChildren
. Como eu resolvo isso?
parent
funcionaria.Respostas:
Resposta curta:
Resposta longa:
haveChildren()
deve ser nomeadohasChildren()
.Também não vejo
hasChildren()
como necessariamente o responsável por um membro da classe booleano. Eu acho que esse método descobriria se um membro do tipoCollection
está ou não vazio.O nome padrão que um IDE atribui aos getters e setters gerados não é suposto ser uma lei imutável.
Outro ponto: as interfaces têm nomes para métodos ainda a serem implementados.
Se os nomes dos métodos fossem supostos para refletir a implementação interna, como alguém seria capaz de projetar uma interface? As interfaces não têm uma implementação nem sabem de antemão o que os implementadores farão sob o capô.
Tomemos, por exemplo, a
Iterator
interface em Java.Quando você implementa
Iterator
, mesmo quando você tem um membro booleano nomeadonext
, não é possível renomearhasNext()
paraisNext()
ouisHavingNext()
. Esse é um detalhe de implementação. Na verdade, eu implementeiIterator
e o que faço é ter um membro do tipo de que minha classe possui uma lista, nomeadanext
(não um booleano).hasNext()
então retornanext!=null
.Veja também:
Observe que
isDead()
não é um getter normal.Leve as ferramentas de produtividade dos IDEs para o que são.
fonte
Sugiro renomear o campo para
parent
para que o getter sejaisParent
e o setter sejasetParent
.Você também pode tentar
childPresent
o nome da variávelisChildPresent
esetChildPresent
como getter e setter.fonte
parent
campo para armazenar a referência ao objeto pai. Eu acho que o que eu preciso é de uma regra geral para converter todos os verbos em adjetivos para campos booleanos.Você pode colocar
does
antes do verbo. ComodoesHaveChildren
no seu exemplo que você forneceu. Ou talvezshouldHaveChildren
dependendo do contexto.fonte
isSomething
é uma parte dessa especificação e muitas suposições são feitas em torno dela, para o bem ou para o mal, indo contra isso comdoesSomething
a vontade de quebrar as coisas de maneiras não tão óbvias, levando a erros.A questão é perfeitamente razoável. Às vezes, renomear o método gerado automaticamente não é suficiente. Exemplo: Espera-se
isXyz()
que os beans gerenciados JSF tenham como método getter de umaboolean xyz
propriedade.Concordo com o BlackPanther, que sugere renomear o campo
parent
e usá-loisParent
como o nome do método. De acordo com o princípio de ocultação de informações, a legibilidade dos métodos getter e setter é mais importante que a do atributo.fonte