我有一个包含Employee对象的类X. 我想让类X成为不可变的.现在即使我将Employee对象声明为final,Employee类也是独立存在的,人们可以访问该特定employee对象的setter方法.是否有可能有一个普通的类Employee和另一个持有Employee的不可变类X但是一旦分配了Employee的值,我们就无法改变它的值?
public final class X {
private final Employee emp;
public X (Employee e){
this.emp = e;
}
public Employee getEmp(){
return emp;
}
}
Run Code Online (Sandbox Code Playgroud)
员工类我不想让它变成不可变的,只是想让类X成为immutable.Hence一旦员工被分配,就不应该允许它改变它.如果没有使Employee类成为不可变的话,这是可能的吗?我希望类Employee独立存在,所以不要私有化它的构造.
您不必公开不可变类的Employee成员.您可以引入仅公开Employee的相关字段的getter方法.
public final class X {
private final Employee emp;
public X (Employee e){
this.emp = e.clone ();
}
public String getEmpName(){
return emp.getName();
}
public int getEmpSalary(){
return emp.getSalary();
}
}
Run Code Online (Sandbox Code Playgroud)
当然,还有一件事要做,以确保该类真正不可变.构造函数应该创建传递给它的Employee的副本.否则,构造函数的调用者仍将具有对Employee的引用,并且能够更改该对象.
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |