Rumah > Soal Jawab > teks badan
public class Student {
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "[" + id + ", " + name + "]";
}
}
Student one = new Student(1, "Tim");
Student two = new Student(2, "Jack");
Map<Integer, Student> map = new HashMap<Integer, Student>();
map.put(one.getId(), one);
map.put(two.getId(), two);
Student tmp = map.get(1);
tmp.setName("New"); // {1=[1, New], 2=[2, Jack]}
可以发现我将Map中的某项取出来并进行了修改,那么Map中的相应项也会被修改,所以说是引用传递的,但是有些情况我就是想把这个东西拿出来用并作些修改,但是Map的数据作为原始值是不想被变更的,这种情况下应该怎么办呢?
巴扎黑2017-04-18 09:09:29
Melaksanakan antara muka Boleh Diklon, mengatasi kaedah klon, mengklon objek baharu dan membuat pengubahsuaian
高洛峰2017-04-18 09:09:29
Melaksanakan antara muka klon dalam java c# melaksanakan antara muka IClonable dan kaedah klon. Panggil kaedah klon ini untuk mendapatkan objek dengan rujukan yang berbeza daripada objek asal tetapi nilai yang sama.
阿神2017-04-18 09:09:29
Dua kaedah: gunakan alatan; tulis semula kaedah klon sendiri
Spring BeanUtils
commons-beanutils
BeanCopier
Lihat CloneDemo.java
@Override
public Student clone(){
Student student = new Student(id, name);
return student;
}
Student one = new Student(1, "Tim");
Student two = new Student(2, "Jack");
Map<Integer, Student> map = new HashMap<Integer, Student>();
map.put(one.getId(), one);
map.put(two.getId(), two);
Student tmp = map.get(1);
Student student2 = tmp.clone();
student2.setName("New");
高洛峰2017-04-18 09:09:29
Kaedah 1, cipta objek baharu dengan kaedah get sahaja Pelajar dalam soalan anda mewarisi objek ini dan telah menetapkan kaedah, jadi objek yang anda letakkan dalam Peta tanpa kaedah set sudah tentu tidak boleh diubah suai
Cara 2, menyusahkan, pantau kaedah yang ditetapkan Pelajar Jika dipanggil, buang pengecualian segera Cara memantau, ini sangat mudah.