不要对外提供publc属性字段
如果一个类需要对外提供某些属性,不要直接使用publc 属性字段,而是属性私有化, 对外提供 getter setter,因为public属性直接操作时无法进行安全检查,而getter setter 方法可以灵活地进行重构升级, 也可以在操作前进行安全检查
反例 (外部成员直接操作 name 可能导致 null)
public class User{
public String name;
public String[] nickNames;
}
正例(getter setter 中可以进行额外的操作-- 虽然大多数时候可能不会这样, 但这样做可以避免未来升级时可能的问题)
public class User{
private String name;
public String[] nickNames;
public void setName(String name){
// 使用 setter 可以在操作时做安全检查
// if(name == null || name.isEmpty())
// throw new NullPointerException("user.name 不能为空");
this.name = name;
}
public String getName(){
// 使用 getter 方法可以做懒加载, 可以带有额外的逻辑等, 这些都是直接使用 public String name 无法完成的
// if(this.name == null || this.name.isEmpty())
// 从缓存中获取
return this.name;
}
// 如果直接操作原始数组可能有危险, 可以返回副本
public String[] getNickNames(){
String[] copy = new String[this.nickNames.length];
for(int x =0;x<nickNames.length; x++){
copy[x]=nickNames[x];
}
return copy;
}
}