Java 在我的pojo字段中使用“public”修饰符而不是“private”是否存在任何风险?
在我所有的JSF项目中,我使用Pojo的标准定义 作为一个普通的旧Java对象,它为字段定义私有修饰符 比如说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()
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[]实例而受到影响,除非对其实例的引用泄漏到外部代码。谢谢。我在寻找一个明确的答案,在这里找到了!谢谢我在寻找一个明确的答案,在这里找到了!