Eg.
boolean isCurrent = false;
你怎么命名它的getter和setter?
Eg.
boolean isCurrent = false;
你怎么命名它的getter和setter?
当前回答
对于名为isCurrent的字段,正确的getter / setter命名是setCurrent() / isCurrent()(至少Eclipse是这样认为的),这是非常令人困惑的,可以追溯到主要问题:
首先,您的字段不应该被称为isCurrent。Is是动词,动词不适用于表示对象的状态。使用形容词来代替,你的getter / setter名字会变得更有意义:
private boolean current;
public boolean isCurrent(){
return current;
}
public void setCurrent(final boolean current){
this.current = current;
}
其他回答
作为一个传达员,你可以:
// setter
public void beCurrent(boolean X) {
this.isCurrent = X;
}
or
// setter
public void makeCurrent(boolean X) {
this.isCurrent = X;
}
我不确定这些命名对以英语为母语的人是否有意义。
private boolean current;
public void setCurrent(boolean current){
this.current=current;
}
public boolean hasCurrent(){
return this.current;
}
强烈建议使用形容词来命名布尔字段。如果您使用IntelliJ生成getter和setter,您将发现对于布尔字段current和isCurrent, getter都是isCurrent()。
我们可以看一下IntelliJ社区源代码,它的测试数据显示,无论你的布尔字段名是否以is开头,getter的名字都是以is开头。
class Getter {
boolean foo;
boolean isBar;
boolean hasBaz;
@java.lang.SuppressWarnings("all")
public boolean isFoo() {
return this.foo;
}
@java.lang.SuppressWarnings("all")
public boolean isBar() {
return this.isBar;
}
@java.lang.SuppressWarnings("all")
public boolean isHasBaz() {
return this.hasBaz;
}
}
当你想调用getter时,当你的布尔字段名以is开头时,你会很困惑。此外,当您的同事想要获得您定义的布尔字段的值时,他们将只知道getter的名称而不是字段的名称。在这种情况下,前缀is是不必要的。
这里是另一个例子,当我从数据库检索数据来实例化一个Employee对象时,isRetired的值总是false。因为Java没有找到合适的setter,布尔字段的值总是默认值,比如false,这是不期望的。
class Employee{
private int age;
private boolean isRetired;
...
public boolean setRetired(boolean isRetired){
this.isRetired = isRetired;
}
}
也许是时候开始修改这个答案了?就我个人而言,我会投票给setActive()和unsetActive()(替代方案可以是setUnActive(), notActive(), disable()等,取决于上下文),因为“setActive”意味着你在任何时候都激活它,而你没有。说"setActive"有点违反直觉,但实际上删除了活动状态。
另一个问题是,你不能以CQRS的方式专门监听一个setActiveEvent,你需要监听一个'setActiveEvent',并确定该监听器内部是否实际上被设置为活动的。当然,也可以在调用setActive()时确定调用哪个事件,但这违背了关注点分离原则。
关于这一点,Martin Fowler的FlagArgument文章是一篇不错的文章:http://martinfowler.com/bliki/FlagArgument.html
然而,我有PHP的背景,看到这种趋势被越来越多地采用。不知道这与Java开发有多大关系。
对于名为isCurrent的字段,正确的getter / setter命名是setCurrent() / isCurrent()(至少Eclipse是这样认为的),这是非常令人困惑的,可以追溯到主要问题:
首先,您的字段不应该被称为isCurrent。Is是动词,动词不适用于表示对象的状态。使用形容词来代替,你的getter / setter名字会变得更有意义:
private boolean current;
public boolean isCurrent(){
return current;
}
public void setCurrent(final boolean current){
this.current = current;
}