以下哪个更好?甚至是基于观点的还是有相关的区别?在某些情况下可以偏爱一个或另一个吗?

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)的理由来支持使用myFieldgetMyField()访问器更适合该类的客户端使用。
所以我认为在任何情况下,示例代码都更好:

public boolean isAllowed() {
    MyEnum.ALLOWED.getInt().equals(myField);
}

编辑:
除了可读性之外,这是一个示例,说明您为什么不希望将内部状态耦合到公共(public)获取者。
假设在开发阶段您从类中删除了public getMyField()方法,因为该类的客户端不再需要或不再需要它,如果isAllowed()在其实现中依赖getMyField(),它将被破坏,应将其替换为myField

07-28 12:04