遇到一个需求,进入界面以后,从服务器得到数据,定义成一个类,在点击提交按钮之前,对类的数据进行修改,如果提交的时候,放弃修改,则不提交。
这就要求,在正式提交服务器之前,不应该在本地的类上边修改,应该在一个新类上修改,如果用户放弃修改,不应该影响本地的类,如果提交成功,再对本地的类修改。
在提交之前,需要用新类与本地类进行对比,看是否已变化
不应该使用=赋值,因为对象使用=赋值,两个对象指向同一个地址,一个修改,两个类都会变化
如果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