[英]How to prevent changes in a mutable object in immutable object
谁能告诉我们如何防止用户修改不可变类中定义的可变对象的值?
示例:我们有一个不变的Student
类,其中包含Address
类的最终引用,该类是可变的。 我想防止用户对Address
类进行任何更改?
安排Address
作为interface
。 使您的可变MutableAddress
正常,并制作一个ImmutableAddress
进行包装,以防止对该字段进行写访问。
interface Address {
public String getNumber();
public void setNumber(String number) throws IllegalAccessException;
public String getStreet();
public void setStreet(String street) throws IllegalAccessException;
public String getZip();
public void setZip(String zip) throws IllegalAccessException;
}
class MutableAddress implements Address {
String number;
String street;
String zip;
@Override
public String getNumber() {
return number;
}
@Override
public void setNumber(String number) {
this.number = number;
}
@Override
public String getStreet() {
return street;
}
@Override
public void setStreet(String street) {
this.street = street;
}
@Override
public String getZip() {
return zip;
}
@Override
public void setZip(String zip) {
this.zip = zip;
}
}
class ImmutableAddress implements Address {
private final Address address;
public ImmutableAddress(Address address) {
this.address = address;
}
@Override
public String getNumber() {
return address.getNumber();
}
@Override
public void setNumber(String number) throws IllegalAccessException {
throw new IllegalAccessException("Cannot write to this field.");
}
@Override
public String getStreet() {
return address.getStreet();
}
@Override
public void setStreet(String street) throws IllegalAccessException {
throw new IllegalAccessException("Cannot write to this field.");
}
@Override
public String getZip() {
return address.getZip();
}
@Override
public void setZip(String zip) throws IllegalAccessException {
throw new IllegalAccessException("Cannot write to this field.");
}
}
或者,将其包装在Proxy中 。 这要复杂得多,但是当您无法访问源时可以提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.