首页 > 解决方案 > 在简单 POJO 中使用私有数据变量

问题描述

最近我正在研究Java封装的概念。我想知道在简单的 POJO 类中将数据变量与公共 setter 方法一起设为私有是否真的有意义?请参考下面的POJO:

public class Employee{
    
    private String id;
    private String name;
    private String department;
    private int age;
    
    public Employee(){        
    }

    public Employee(String id, String name, String department, int age){
        this.id = id;
        this.name = name;
        this.department = department;
        this.age = age;
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getDepartment() {
        return department;
    }
 
    public void setDepartment(String department) {
        this.department = department;
    }
    
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
  
}

我的意思是,当我无论如何都可以使用 setter 方法更改它时,为什么我将 name 变量设为私有?

标签: javaprivateencapsulation

解决方案


在一般情况下,这将是非常基本的

    public void setName(String name) {
        this.name = name;
    }

它与做employee.name = "william hammond". 但是想象一下,您想要实现某种private String normalize(string username)方法,例如您可能将其全部设为小写、检查有效名称或阻止 unicode 条目。如果您name最初公开,您将让用户这样做employee.name = "whatever they want :) 123",您将失去执行该约束的能力。

另请参阅为什么使用 getter 和 setter/accessor?


推荐阅读