TypechoJoeTheme

至尊技术网

登录
用户名
密码

Java模型类中Getter和Setter方法的规范与实现,java getter和setter方法

2025-12-11
/
0 评论
/
1 阅读
/
正在检测是否收录...
12/11

正文:

在Java开发中,模型类(POJO或Entity)是数据封装的核心载体,而Getter和Setter方法则是访问和修改这些数据的标准方式。虽然它们看似简单,但规范的实现能显著提升代码的可读性、安全性和可维护性。本文将深入探讨其设计原则与最佳实践。


1. 为什么需要Getter和Setter?

面向对象编程(OOP)的核心思想之一是封装,即隐藏对象内部状态并通过方法暴露可控的访问权限。直接暴露字段(如public String name;)会破坏封装性,导致以下问题:
- 不可控的修改:外部代码可能随意修改字段值,引发数据不一致。
- 无法添加逻辑:如字段修改时需要触发校验或事件。
- 难以维护:后续需求变更(如字段改名)可能影响大量代码。

通过Getter和Setter,我们可以:
- 控制访问权限:例如只提供Getter(只读属性)。
- 添加业务逻辑:如数据校验、日志记录。
- 兼容性:内部字段名变更时,方法签名可保持不变。


2. 基本规范与实现

命名规范

  • Getter:前缀为get,布尔字段可为is
  • Setter:前缀为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


3. 高级实践

1. 数据校验

在Setter中添加校验逻辑,避免非法值:

public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("年龄不能为负数");
    }
    this.age = age;
}

2. 延迟初始化

对于耗时的资源,可通过Getter实现懒加载:

public List<Order> getOrders() {
    if (orders == null) {
        orders = loadOrdersFromDatabase();
    }
    return orders;
}

3. 防御性拷贝

返回可变对象时,避免外部修改内部状态:

public List<String> getTags() {
    return new ArrayList<>(tags); // 返回副本
}


4. 常见反模式

  1. 无意义的Setter
    java public void setId(int id) { // ID通常不应被修改 this.id = id; }
    应移除或设为private

  2. 暴露内部结构
    java public List&lt;String&gt; getTags() { return tags; // 外部可直接修改List }

  3. 过度生成:工具自动生成所有Getter/Setter,但实际可能只需部分。


5. 工具与框架支持

  • Lombok:通过注解自动生成,减少样板代码:
    java @Getter @Setter private String name;
  • IDE生成:如IntelliJ的Alt + Insert快捷生成。


结语

Getter和Setter是Java模型类的基石,其规范实现直接影响代码质量。遵循原则、结合业务逻辑灵活设计,才能充分发挥封装的优势。记住:不要为了写而写,而是为了需求而写

朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/41040/(转载时请注明本文出处及文章链接)

评论 (0)