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

Java 避免变量名冲突的布尔字段命名约定,java,coding-style,naming-conventions,javabeans,Java,Coding Style,Naming Conventions,Javabeans,我有一个员工课程。它需要一个布尔标志来判断该员工是否是经理 从这个问题 我知道命名转换是将变量命名为X,将getter命名为isX。所以我的Employee类是这样的 class Employee { boolean manager; boolean isManager(){ return this.manager; } } 但是经理的名字让我很困惑。单词manager是一个名词,而不是形容词,如active,current,openin管理器可以是布尔标志或管理器对象

我有一个
员工
课程。它需要一个布尔标志来判断该员工是否是经理

从这个问题 我知道命名转换是将变量命名为
X
,将getter命名为
isX
。所以我的
Employee
类是这样的

class Employee {
  boolean manager; 

  boolean isManager(){
    return this.manager;
  }
}
但是经理的名字让我很困惑。单词
manager
是一个名词,而不是形容词,如
active
current
open
in<代码>管理器可以是布尔标志或管理器对象。此外,如果我确实希望
Employee
类中的经理有一个成员变量,那么标志已经使用了
manager
变量名

class Employee {
  boolean manager; 

  boolean isManager(){
    return this.manager;
  }

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

在这种情况下,是否有其他方法命名布尔管理器标志?谢谢

像这样的怎么样

class Employee {
    Employee manager;

    boolean isManager(){
        return (manager != null && manager instanceof Manager);
    }
}

一个选项是使用两值枚举代替布尔值:

class Employee {
    enum Type { REGULAR, MANAGER }

    Type type = Type.REGULAR;
    Employee manager;

    Type getType() {
        return type;
    }

    Employee getManager() {
        return manager;
    }
}

也可以在枚举名称和get方法名称中使用
角色
级别
而不是类型。

好的,因此这里真正的冲突是在数据建模级别

  • 员工即经理(布尔标志)
  • 员工有一个经理(员工值字段)
有两个(可能)名称相同的不同“经理”概念。那么,我们如何在模型级别处理这种(明显的)冲突呢

  • 我们可以忽略它
  • 我们可以简单地重命名其中一个概念。但这是个坏主意,因为这两个概念可能密切相关1
  • 我们可以深入了解这些概念;i、 e.在“作为一个具有管理者身份的人”和“作为另一个人的管理者”之间是否存在显著差异(对于模型而言)。这可能会告诉我们,这些概念差异很大,它们需要有不同的名称
因此,假设我们在建模级别忽略它,那么我们如何在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调整了属性名称。例如,使用“经理”和“经理”:

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



1-例如,在UML术语中,您可以将“经理”属性建模为从员工与其经理之间的关联中派生出来的属性。属性值可以通过测试该员工是否是通过关联的任何其他员工的经理来获得。

这是一个很好的问题。。。因为我也为这类事情奋斗了多年,但仍然无法找到最好的配方。我认为这不是正确的语义。如果
isManager
返回true,并且
getManager
返回管理该人员的人员,则更有意义。哦,好的,我现在明白了。你为什么不把你的旗子命名为“管理者”,就像这个方法一样,也许可以把旗子命名为“私有”。
是-a
有-a
向我解释清楚这个问题。但我不太明白版本1和版本2之间的区别。而版本2将在
getManager
方法中出现编译错误。编译错误是打字错误。固定的。版本1和版本2之间的区别在于版本1不兼容JavaBeans,在某些上下文中可能会导致问题;e、 g.运行时错误,因为“两个属性同名”,某些框架绑定
Employee
类时出现问题。您可以将其称为
isManager
。这里的JavaBeans约定有点奇怪。
  public class Employee {
      private boolean isManager;
      private Employee manager;  

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

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