[英]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.