为动词命名布尔字段


14

在Java中,按照约定,布尔字段的getter和setter将是isField()setField()。这工作完全正常与是形容词喜欢字段名activevisibleclosed,等。

但是,如何命名具有动词含义的字段,例如haveChildren?在动词()上加上“ _ing” ,也许吗?havingChildren

为了澄清,我无法控制方法名称(getter和setter),因为它们是由IDE自动生成的。因此,我需要一个适当的字段名称,以便在IDE为其生成getter时有意义。例如,hasChildren是一个完美的字段名称,但是当IDE为该字段生成getter时,它将为isHasChildren。我该如何解决?


3
如果这是一个布尔字段,parent将起作用。
yannis 2013年

2
如果您可以摆脱含义的颠覆,那么“无子女”将成为现实。
凯莉安·佛斯

3
为了避免由IDE引起的语法问题,似乎不得不跳过有关字段名称的愚蠢行为。无论如何,这里还有一些其他建议,尽管我认为其他人已经给出的建议更好:isAllowedChildren,isNotEmpty,isContainer,isLeaf
Wily博士的学徒

没有孩子似乎是要走的路。父级的问题是我已经有一个父级字段来保存对父级对象的引用。我认为我需要的是一条通用规则,将所有动词转换为布尔字段的形容词。
dnang

1
我同意@dnhang的观点,即您不应让IDE指示类似这样的内容。选择变量名和方法名对于使代码易于阅读很重要,因为编写该IDE应该无关紧要。
Digitalex 2014年

Answers:


11

简短答案:

  • 方法名称不能用来反映内部实现,而是可以预期的行为。

长答案:

haveChildren()应该命名hasChildren()

另外,我认为hasChildren()布尔类成员不一定是吸气剂。我想这样的方法会找出type的成员是否Collection为空。

IDE赋予生成的吸气剂的默认名称,并且不要认为设置方法是一成不变的。

还有一点:接口具有尚未实现的方法的名称。

如果假设方法名称可以反映内部实现,那么有人将如何设计接口?接口没有实现,也没有事先知道实现者将在后台执行的操作。

IteratorJava中的接口为例。

实现时Iterator,即使您有一个名为布尔成员的成员next,也不能将其重命名hasNext()isNext()isHavingNext()。这是一个实现细节。实际上,我已经实现Iterator了,我要做的是让我的班级拥有一个名为next(不是布尔值)列表的类型的成员。hasNext()然后返回next!=null

另外,请参阅以下内容:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

请注意,这isDead()不是正常的吸气剂。

充分利用IDE的生产力工具。


3

我建议将字段重命名为,以parent使getter isParent和setter为setParent

您也可以尝试childPresent输入变量名,isChildPresent并将其setChildPresent用作getter和setter。


1
与上面的Yannis注释相同的想法,但是问题是我已经有了一个parent字段来保存对父对象的引用。我认为我需要的是一条通用规则,将所有动词转换为布尔字段的形容词。
dnang

0

您可以does在动词之前加上。例如doesHaveChildren在您提供的示例中。或shouldHaveChildren取决于上下文。


1
问题是,我无法控制方法名称,因为getter和setter是由IDE(例如Eclipse)自动生成的。
dnang 2013年

1
只是重命名方法?添加一个键绑定以重命名方法(如果还没有的话)。
miguel.martin 2013年

@dnhang如果是您的代码,则无论IDE自动生成它们时如何调用,都可以随意调用这些方法。
理查德

1
@ miguel.martin您不想这样做的原因之一是Java-beans。假设isSomething是该规范的一部分,围绕它进行了许多假设,无论好坏,与之相反doesSomething可能会以不太明显的方式破坏事物,从而导致错误。

0

这个问题是完全合理的。有时仅重命名自动生成的方法是不够的。示例:JSF托管bean应该具有isXyz()作为boolean xyz属性的getter方法。

我同意BlackPanther谁建议重命名字段parent,并使用isParent作为方法名。根据信息隐藏原理,getter和setter方法的可读性比属性的重要性更为重要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.