关于is / has的布尔类属性命名约定的问题

时间:2015-11-19 06:45:11

标签: java naming

我为患者所代表的患者提供这些属性。我想知道命名他们的最佳做法是什么?

  1. 她是否处于哺乳期:布尔
  2. 她是否怀孕:boolean
  3. 她是否准备怀孕:boolean
  4. 他/她最近是否患有低血糖:boolean
  5. 他/她是否有并发症:boolean
  6. 首先想到的是将它们命名为:

    boolean isInLactationPeriod;
    boolean isPregnant;
    boolean isPreparingPregnant;
    boolean hasSufferedLowBloodGlucoseRecently;
    boolean hasComplications;
    

    但是我也遇到过一些建议,即java属性不应该是带有前导/是的名称,而是将它们留给getter / setter方法,例如

    boolean pregnant;
    boolean isPregnant() {
        return pregnant;
    }
    

    哪一个更好?

3 个答案:

答案 0 :(得分:5)

它可能更基于便利性或基于意见。但您可以使用isPregnant,因为它或多或少地表明了这一点。

请参阅Java文档:

  

8.3.2布尔属性

     

此外,对于布尔属性,我们允许匹配的getter方法   模式:

     

public boolean is();

     

可以提供这种“是”方法而不是a   “get”方法,或者除了a之外还可以提供   “得到”方法。在任何一种情况下,如果“是”   方法存在于布尔属性然后我们将使用   “是”方法来读取属性值。一个例子   布尔属性可能是:

public boolean isMarsupial(); 
public void setMarsupial(boolean m);

答案 1 :(得分:4)

这两个选项看起来都不错,但我更喜欢后者。

  

是前缀可用于布尔变量和方法。 isSet,   isVisible,isFinished,isFound,isOpen这是命名约定   用于Sun用于Java核心的布尔方法和变量   包。

     

使用is前缀解决了选择错误布尔值的常见问题   名称如status或flag。 isStatus或isFlag根本不适合,和   程序员被迫选择更有意义的名字。

     

布尔变量的Setter方法必须设置前缀,如:

     

void setFound(boolean isFound);

     

is前缀有一些替代方案,在某些方面更适合   的情况。这些是,可以和应该是前缀:

     

boolean hasLicense(); boolean canEvaluate(); boolean shouldAbort   = false;

请参阅this

  

此外,命名字段pregnant看起来更合适,getter /   塞特斯的名字会更有意义。 Is是一个动词,可以是   避免在变量名中使用。

答案 2 :(得分:1)

惯例

基本上,SCJP 6书中有关bean命名约定的内容如下:

  • 您的变量不应该;
  • getters应该以 get ;
  • 开头
  • 对于布尔值, get 可以替换为

匹配Rahul's answer

没有任何内容,所以理想情况下,如果你的变量名是一个形容词,我想你应该使用,否则得到

约定的限制

然后,那些是惯例,像我这样的人会感谢你尊重他们(以及一些工具和框架,如Spring),但在某些情况下 可以让人类读者更有意义。如果你想违反惯例,那就取决于你和你的最佳判断。