为了账号安全,请及时绑定邮箱和手机立即绑定

Java:关于Map的引用传递

Java:关于Map的引用传递

largeQ 2019-03-05 13:19:21
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的数据作为原始值是不想被变更的,这种情况下应该怎么办呢?
查看完整描述

4 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

实现Cloneable接口,覆盖clone方法,克隆一个新的对象出来做修改


查看完整回答
反对 回复 2019-04-19
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

java中实现clonable接口 c#实现IClonable接口,实现clone方法。调用该克隆方法得到一个引用与原对象不同但值相同的object。


查看完整回答
反对 回复 2019-04-19
?
墨色风雨

TA贡献1853条经验 获得超6个赞

方法1,新建一个对象,只有get方法,你问题里的Student继承这个对象,有set方法,这样你在Map里放的没有set方法的对象,固然就是不可修改的

方法2,麻烦点啊,监视Student的set方法,如果有调用,马上抛个异常出来,如何监视,这个很容易的。


查看完整回答
反对 回复 2019-04-19
  • 4 回答
  • 0 关注
  • 1747 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号