Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在我的pojo字段中使用“public”修饰符而不是“private”是否存在任何风险?_Java_Coding Style_Pojo - Fatal编程技术网

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

Java 在我的pojo字段中使用“public”修饰符而不是“private”是否存在任何风险?,java,coding-style,pojo,Java,Coding Style,Pojo,在我所有的JSF项目中,我使用Pojo的标准定义 作为一个普通的旧Java对象,它为字段定义私有修饰符 比如说 public class Pojo { // My private fields private String field1; private String field2; // setters AND getters // ---------------------------- public String getField1()

在我所有的JSF项目中,我使用Pojo的标准定义 作为一个普通的旧Java对象,它为字段定义私有修饰符

比如说

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 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;
    }
    // ---------------------------- 
}
在我的Pojo字段中使用public修饰符而不是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 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;
    }
    // ---------------------------- 
}

我真的需要做那个改变修改器,不仅仅是为了实验,风险在于你基本上不再能控制这些值。您永远不能强制执行任何类型的验证,因为任何代码都可以随时更改值

此外,您永远不能更改数据存储方式的实现细节,因为您正在公开这些细节。仅使用getter和setter,就可以将类可以做的API与实现细节分离开来


现在你可以决定这一切都好,尽管我不会。如果您使用公共字段路径,我建议您删除getter/setter方法,否则任何看到这些方法的人都可能会觉得您有一个合适的类,而实际上您只有一个数据桶。

风险在于您基本上不再能够控制这些值。您永远不能强制执行任何类型的验证,因为任何代码都可以随时更改值

此外,您永远不能更改数据存储方式的实现细节,因为您正在公开这些细节。仅使用getter和setter,就可以将类可以做的API与实现细节分离开来


现在你可以决定这一切都好,尽管我不会。如果您选择公共字段路径,我建议您删除getter/setter方法,否则任何看到这些方法的人都可能会觉得您有一个合适的类,而实际上您只有一个数据桶。

嗯,风险是一个模糊的术语。至少这是一种糟糕的做法。为什么你真的需要这样做?@Keppil:IMHO,一个只不过是一堆公共字段和一些简单的辅助方法的类,例如loadFrom,它接受对另一个实例的引用并从中复制所有字段值,在语义上应该被视为非常像一个固定大小的数组,可以容纳多种类型的混合,其元素是通过名称而不是数字访问的。在int[]中存储信息的类的安全性不会因为外部代码也可以创建int[]实例而受损,除非对其实例的引用泄漏到外部代码。风险是一个模糊的术语。至少这是一种糟糕的做法。为什么你真的需要这样做?@Keppil:IMHO,一个只不过是一堆公共字段和一些简单的辅助方法的类,例如loadFrom,它接受对另一个实例的引用并从中复制所有字段值,在语义上应该被视为非常像一个固定大小的数组,可以容纳多种类型的混合,其元素是通过名称而不是数字访问的。在int[]中存储信息的类的安全性不会因为外部代码也可以创建int[]实例而受到影响,除非对其实例的引用泄漏到外部代码。谢谢。我在寻找一个明确的答案,在这里找到了!谢谢我在寻找一个明确的答案,在这里找到了!