在 Java 中进行封装(Encapsulation)时,核心思想是隐藏实现细节,暴露必要接口。以下是实际开发中需要注意的关键点:
private 修饰private String name;
private int age;
public 方法控制读写getXxx() / setXxx()public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
避免非法数据进入对象内部
public void setAge(int age) {
if (age < 0 || age > 150) {
throw new IllegalArgumentException("年龄不合法");
}
this.age = age;
}
返回对象引用会导致外部修改内部状态
❌ 错误示例:
public List<String> getList() {
return list; // 外部可修改
}
✅ 正确做法(防御性拷贝):
public List<String> getList() {
return new ArrayList<>(list);
}
或使用不可变集合(Java 9+):
return List.copyOf(list);
不要在构造方法中跳过校验
public User(String name, int age) {
setName(name);
setAge(age);
}
private String password;
public void setPassword(String password) {
this.password = password;
}
private 就不 protectedprotected 就不 public同一包内可见,外部不可见
void internalMethod() { }
public staticpublic static final int MAX_SIZE = 100;
❌ 所有字段都加 getter/setter(等于没封装)
❌ getter/setter 中写复杂业务逻辑
❌ 返回 this 导致链式调用破坏封装
❌ 把集合、数组直接暴露出去
封装不是加 getter/setter,而是控制“谁能看、谁能改、怎么改”。
如果你愿意,我可以结合 实体类 / DTO / 领域模型 给你讲更实用的封装方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。