En Java, por convención getter y setter para campos booleanos serán isField()
y setField()
. Esto funciona perfectamente bien con los nombres de campos que son adjetivos como active
, visible
, closed
, etc.
Pero, ¿cómo nombro un campo que tenga el significado de un verbo, como haveChildren
? Agregue "_ing" al verbo ( ), ¿tal vez?havingChildren
Para aclarar, no tengo control de los nombres de los métodos (getter y setter) ya que son generados automáticamente por el IDE. Entonces, lo que necesito es un nombre de campo apropiado para que cuando el IDE genere un captador para él, tenga sentido. Por ejemplo, hasChildren
es un nombre de campo perfecto, pero cuando el IDE genera el captador para el campo, sería isHasChildren
. ¿Cómo puedo solucionar esto?
parent
funcionaría.Respuestas:
Respuesta corta:
Respuesta larga:
haveChildren()
debe ser nombradohasChildren()
.Tampoco veo
hasChildren()
que sea necesariamente el captador de un miembro de clase booleana. Supongo que tal método descubriría si un miembro de tipoCollection
está vacío o no .El nombre predeterminado que un IDE da a los captadores y establecedores generados no se supone que sea una ley establecida en piedra.
Otro punto: las interfaces tienen nombres para los métodos aún por implementar.
Si se supone que los nombres de los métodos reflejan la implementación interna, ¿cómo podría alguien diseñar una interfaz? Las interfaces no tienen una implementación ni saben de antemano qué harán los implementadores bajo el capó.
Tomemos por ejemplo la
Iterator
interfaz en Java.Cuando implementa
Iterator
, incluso cuando tiene un miembro booleano llamadonext
, no se supone que cambie el nombrehasNext()
aisNext()
oisHavingNext()
. Ese es un detalle de implementación. De hecho, lo he implementadoIterator
y lo que hago es tener un miembro del tipo de lo que sea que mi clase tenga una lista, llamadanext
(no booleana).hasNext()
Luego regresanext!=null
.Además, mira esto:
Tenga en cuenta que
isDead()
no es getter normal.Tome las herramientas de productividad de IDE por lo que son.
fuente
Sugeriría cambiar el nombre del campo a
parent
para que el getter seaisParent
y setter seasetParent
.También puede probar
childPresent
para el nombre de la variable yisChildPresent
, ysetChildPresent
como el getter y setter.fuente
parent
campo para contener la referencia al objeto padre. Creo que lo que necesito es una regla general para convertir todos los verbos en adjetivos para campos booleanos.Podrías poner
does
antes del verbo. Tal comodoesHaveChildren
en su ejemplo que proporcionó. O tal vezshouldHaveChildren
dependiendo del contexto.fuente
isSomething
es parte de esa especificación y se hacen muchas suposiciones en torno a ella, para bien o para mal, ir en contra de estodoesSomething
puede romper las cosas de maneras no tan obvias, lo que lleva a errores.La pregunta es perfectamente razonable. A veces, cambiar el nombre del método generado automáticamente no es suficiente. Ejemplo: se espera que los beans gestionados JSF tengan
isXyz()
como método getter de unaboolean xyz
propiedad.Estoy de acuerdo con BlackPanther, que sugiere cambiar el nombre del campo
parent
y usarloisParent
como nombre del método. Según el principio de ocultación de información, la legibilidad de los métodos getter y setter es más importante que la del atributo.fuente