布尔字段的命名约定,以避免变量名冲突

问题描述 投票:0回答:3

我有一个Employee类。它需要一个布尔标志来告知此员工是否是经理。

来自此问题For a boolean field, what is the naming convention for its getter/setter?我知道命名转换是将变量命名为X,将获取方法命名为isX。所以我的Employee类将是这样的

class Employee {
  boolean manager; 

  boolean isManager(){
    return this.manager;
  }
}

但是manager这个名字让我感到困惑。单词manager是名词,而不是形容词,例如active中的currentopenthe above questionmanager可以是布尔标志或管理器对象。此外,如果我确实想要Employee类中管理器的成员变量,则该标志已采用manager变量名。

class Employee {
  boolean manager; 

  boolean isManager(){
    return this.manager;
  }

  //Employee manager; //don't know how to name this
}

在这种情况下,还有另一种命名布尔值管理器标志的方法吗?谢谢

java coding-style naming-conventions javabeans
3个回答
1
投票

一种选择是使用二值枚举代替布尔值:

class Employee {
    enum Type { REGULAR, MANAGER }

    Type type = Type.REGULAR;
    Employee manager;

    Type getType() {
        return type;
    }

    Employee getManager() {
        return manager;
    }
}

在枚举名称和get方法名称中都可以使用RoleLevel代替Type。


1
投票

确定,所以真正的冲突在于数据建模级别。

  • 雇员is-a经理(布尔标志)
  • 雇员拥有经理(“雇员”字段)

有两个(可能)具有相同名称的不同“管理器”概念。那么我们如何在模型级别处理这个(明显的)冲突?

  • 我们可以忽略它。
  • 我们可以简单地重命名一个或其他概念。但这是一个坏主意,因为这两个概念可能紧密相关1
  • 我们可以深入研究概念;即,“在模型中”“成为具有管理者身份的人”与“成为另一个人的管理者的角色”之间有很大的区别。这个可以告诉我们,这些概念完全不同,以至于需要可以使用不同的名称。

因此,假设我们在建模级别忽略它,我们如何在Java级别处理它?这里有一些建议:

版本1具有两个不同的具有相同名称的属性。这可能违反了JavaBeans约定……至少在大多数人看来是这样。

  public class Employee {
      private boolean isManager;
      private Employee manager;  

      public boolean isManager(){
        return this.isManager;
      }

      public Employee getManager(){
        return this.manager;
      }
  }

版本2调整属性名称。例如,使用“ manager”和“ aManager”:

  public class Employee {
      private boolean isManager;
      private Employee manager;  

      public boolean isAManager(){
        return this.isManager;
      }

      public Employee getManager(){
        return this.manager;
      }
  }

或者您可以调整其他属性名称。


1-例如,以UML术语,您可以将关联员工与经理的协会的“经理”属性建模为derived。可以通过测试该雇员是否是任何其他雇员的经理,通过关联来得出属性值。


-1
投票

这样的事情怎么样?

class Employee {
    Employee manager;

    boolean isManager(){
        return (manager != null && manager instanceof Manager);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.