public class SensitiveObject1 {
private char[] password;
SensitiveObject1(String iniValue){
this.password = iniValue.toCharArray();
}
public final String get() {
return String.valueOf(password);
}
public final void doPasswordChange(){
for(int i = 0; i < password.length; i++) {
password[i]= '*' ;}
}
public final void printValue(){
System.out.println(String.valueOf(password));
}
}
看上去没什么问题,如果我们希望密码被返回之后就不能够被修改,应该怎么做呢?
SensitiveObject的限制
为了实现上面的功能,我们可以考虑引入一个是否返回的变量,如果返回过了,就不允许进行密码修改了。
那么我们可以将上面的代码修改成这样:
public class SensitiveObject2 {
private char[] password;
private boolean returned=false;
SensitiveObject2(String iniValue){
this.password = iniValue.toCharArray();
}
public final String get()
{
if(!returned) {
returned=true;
return String.valueOf(password);
}else {
throw new IllegalStateException("已经返回过了,无法重复返回");
}
}
public final void doPasswordChange(){
if(!returned) {
for (int i = 0; i < password.length; i++) {
password[i] = '*';
}
}
}
}