遇到一個需求,進入界面以後,從服務器得到數據,定義成一個類,在點擊提交按鈕之前,對類的數據進行修改,如果提交的時候,放棄修改,則不提交。
這就要求,在正式提交服務器之前,不應該在本地的類上邊修改,應該在一個新類上修改,如果用戶放棄修改,不應該影響本地的類,如果提交成功,再對本地的類修改。
在提交之前,需要用新類與本地類進行對比,看是否已變化
不應該使用=賦值,因爲對象使用=賦值,兩個對象指向同一個地址,一個修改,兩個類都會變化
如果new一個新對象,將老對象的值一個一個set到新對象,雖然能實現,但是如果屬性比較多,則比較麻煩
好的辦法就是重寫類的clone方法以及equals方法
class Student implements Cloneable{
private int number;
private String name;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object clone() {
Student o = null;
try {
o = (Student) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
@Override
public boolean equals(Object obj) {
// 如果爲同一對象的不同引用,則相同
if (this == obj) {
return true;
}
// 如果傳入的對象爲空,則返回false
if (obj == null) {
return false;
}
// 如果兩者屬於不同的類型,不能相等
if (getClass() != obj.getClass()) {
return false;
}
// 類型相同, 比較內容是否相同
Student other = (Student) obj;
return number == other.number&&
name.equals(other.name);
}
}
Student s=new Student();
s.setNumber(111);
s.setName("123");
Student ss=(Student) s.clone();
ss.setNumber(111);
ss.setName("123");
System.out.println(s.getNumber());
System.out.println(ss.getNumber());
System.out.println(s.equals(ss));
打印的值是
111
111
true
修改一下
Student s=new Student();
s.setNumber(113);
s.setName("123");
Student ss=(Student) s.clone();
ss.setNumber(111);
ss.setName("123");
System.out.println(s.getNumber());
System.out.println(ss.getNumber());
System.out.println(s.equals(ss));
打印的值
113
111
false