2025年12月11日/ 浏览 27
正文:
在Java开发中,模型类(POJO或Entity)是数据封装的核心载体,而Getter和Setter方法则是访问和修改这些数据的标准方式。虽然它们看似简单,但规范的实现能显著提升代码的可读性、安全性和可维护性。本文将深入探讨其设计原则与最佳实践。
面向对象编程(OOP)的核心思想之一是封装,即隐藏对象内部状态并通过方法暴露可控的访问权限。直接暴露字段(如public String name;)会破坏封装性,导致以下问题:
– 不可控的修改:外部代码可能随意修改字段值,引发数据不一致。
– 无法添加逻辑:如字段修改时需要触发校验或事件。
– 难以维护:后续需求变更(如字段改名)可能影响大量代码。
通过Getter和Setter,我们可以:
– 控制访问权限:例如只提供Getter(只读属性)。
– 添加业务逻辑:如数据校验、日志记录。
– 兼容性:内部字段名变更时,方法签名可保持不变。
get,布尔字段可为is。 set,返回类型为void。 示例代码:
public class User {
private String name;
private boolean active;
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String name) {
this.name = name;
}
// 布尔类型Getter
public boolean isActive() {
return active;
}
}
public,但可根据需求调整:
private protected 在Setter中添加校验逻辑,避免非法值:
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
this.age = age;
}
对于耗时的资源,可通过Getter实现懒加载:
public List<Order> getOrders() {
if (orders == null) {
orders = loadOrdersFromDatabase();
}
return orders;
}
返回可变对象时,避免外部修改内部状态:
public List<String> getTags() {
return new ArrayList<>(tags); // 返回副本
}
无意义的Setter:
java
public void setId(int id) {
// ID通常不应被修改
this.id = id;
}
应移除或设为private。
暴露内部结构:
java
public List<String> getTags() {
return tags; // 外部可直接修改List
}
过度生成:工具自动生成所有Getter/Setter,但实际可能只需部分。
java
@Getter @Setter
private String name; Alt + Insert快捷生成。 Getter和Setter是Java模型类的基石,其规范实现直接影响代码质量。遵循原则、结合业务逻辑灵活设计,才能充分发挥封装的优势。记住:不要为了写而写,而是为了需求而写。