Java:关于Map的引用传递
高洛峰
高洛峰 2017-04-18 09:07:29
0
4
555
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的数据作为原始值是不想被变更的,这种情况下应该怎么办呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(4)
巴扎黑

Melaksanakan antara muka Boleh Diklon, mengatasi kaedah klon, mengklon objek baharu dan membuat pengubahsuaian

小葫芦

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.

阿神

Dua kaedah: gunakan alatan; tulis semula kaedah klon sendiri

Pelbagai alatan:

Spring BeanUtils
commons-beanutils
BeanCopier

Timpa kaedah klon

Lihat CloneDemo.java

Di Bawah Pelajar:

@Override
public Student clone(){
    Student student = new Student(id, name);
    return student;
}

Gunakan

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");
小葫芦

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan