以下哪个更好?甚至是基于观点的还是有相关的区别?在某些情况下可以偏爱一个或另一个吗?
public class MyClass {
private Integer myField;
public void setMyField(Integer myField) {
this.myField = myField;
}
public Integer getMyField() {
return myField;
}
}
我需要一种方法来检查是否允许某些东西。请,让我们不要谈论这个代码示例的意义。这只是一个最小的例子。
实现1
public boolean isAllowed() {
MyEnum.ALLOWED.getInt().equals(getMyField());
}
实现2
public boolean isAllowed() {
MyEnum.ALLOWED.getInt().equals(myField);
}
编辑:
该帖子在链接的问题中没有答案(请参阅初始帖子的评论)
最佳答案
我认为这是良好做法的问题。区别在于代码的可读性。
通常,如果不需要,则应避免间接访问。MyClass
的当前实例在这些字段之一中具有信息以实现操作。它不需要向自身隐藏其内部状态。因此在内部,MyClass
没有比直接使用getMyField()
字段更有值(value)的理由来支持使用myField
。getMyField()
访问器更适合该类的客户端使用。
所以我认为在任何情况下,示例代码都更好:
public boolean isAllowed() {
MyEnum.ALLOWED.getInt().equals(myField);
}
编辑:
除了可读性之外,这是一个示例,说明您为什么不希望将内部状态耦合到公共(public)获取者。
假设在开发阶段您从类中删除了
public getMyField()
方法,因为该类的客户端不再需要或不再需要它,如果isAllowed()
在其实现中依赖getMyField()
,它将被破坏,应将其替换为myField
。