在我的pojo字段中使用“public”修饰符而不是“private”是否有任何风险?

时间:2013-04-07 16:19:43

标签: java coding-style pojo

在我的所有JSF项目中,我使用Pojo的标准定义 作为Plain Old Java Object定义字段

private修饰符

例如

public class Pojo {

    // My private fields
    private String field1;
    private String field2;

    // setters AND getters
    // ----------------------------
    public String getField1() {
        return field1;
    }
    public void setField1(String field1) {
        this.field1 = field1;
    }
    public String getField2() {
        return field2;
    }
    public void setField2(String field2) {
        this.field2 = field2;
    }
    // ---------------------------- 
}

在我的public字段中使用private修饰符而不是Pojo是否存在任何风险 例如

public class Pojo {

    // My private fields
    public String field1;
    public String field2;

    // setters AND getters
    // ----------------------------
    public String getField1() {
        return field1;
    }
    public void setField1(String field1) {
        this.field1 = field1;
    }
    public String getField2() {
        return field2;
    }
    public void setField2(String field2) {
        this.field2 = field2;
    }
    // ---------------------------- 
}

请注意
我真的需要这样做(改变修饰符)不只是为了实验

1 个答案:

答案 0 :(得分:10)

“风险”是你基本上不再对价值有任何控制权。您永远不能执行任何类型的验证,因为任何代码都可以随时更改值。

此外,您永远无法更改数据存储方式的实施细节,因为您正在公开这些数据。只需使用getter和setter,就可以将API(类可以做什么)与实现细节分开。

现在你可以决定这一切都很好(虽然我不会)。如果您沿着公共现场路线走下去,我会建议您删除getter / setter方法 - 否则任何看到这些方法的人都可能看起来就像你有一个“适当的“课程,当你真的有一个数据桶。