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.在“作为一个具有管理者身份的人”和“作为另一个人的管理者”之间是否存在显著差异(对于模型而言)。这可能会告诉我们,这些概念差异很大,它们需要有不同的名称李>
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;
}
}