首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未更新Java WeakHashMap引用

未更新Java WeakHashMap引用
EN

Stack Overflow用户
提问于 2009-09-18 17:40:38
回答 1查看 595关注 0票数 0

在下面的代码中,我创建了一个Pen对象,并将其颜色初始化为白色。在笔的构造函数中,在将字段' penColor‘设置为传递给构造函数的值之后,我更新了一个全局静态弱哈希映射,我将它保存在'this指针’的位置-在我的例子中是一个笔,值是另一个弱哈希映射,它的键是字符串"penColor“,它的值是对penColor成员字段的引用。

接下来,我的代码通过调用画笔的setColor函数来更新画笔的颜色。我本以为在这次更新之后,如果我在我的弱have中查找Pen对象的颜色字段,它会反映新的颜色,但它没有。有人能解释一下这是为什么吗?

代码语言:javascript
复制
package weakhashmaptest;


import java.awt.Color;
import java.util.WeakHashMap;
import java.util.Iterator;

public class Main {

    static WeakHashMap <Object, WeakHashMap>ownerMap = new WeakHashMap<Object, WeakHashMap>();

    public static void main(String[] args) {

        Pen r = new Pen(Color.WHITE);

        Iterator i = ownerMap.keySet().iterator();

        while(i.hasNext()) {
            Object key = i.next();
            System.out.println("\telement of hashmap is : " +ownerMap.get(key));
        }

        r.setColor(Color.BLACK);

        System.gc();

        i = ownerMap.keySet().iterator();

        while(i.hasNext()) {
            Object key = i.next();
            System.out.println("\telement of hashmap is : " +ownerMap.get(key));
        }

    }

    public static void mapUpdate(Object owner, Object reference, String field_name) {

        WeakHashMap reference_map = ownerMap.get(owner);

        if (reference_map == null) {         
            reference_map = new WeakHashMap();
            reference_map.put(field_name, reference);
        } else {         
            reference_map.put(field_name, reference);
        }

        ownerMap.put(owner, reference_map);

    }

}

class Pen {

    Color penColor;

    public Pen(Color c) {

        penColor = c;
        Main.mapUpdate(this, penColor, "penColor");

    }

    public void setColor(Color c) {

        penColor = c;

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-18 17:46:59

您要将对Color对象的引用放入贴图中,而不是放入钢笔。如果你把钢笔放到地图上,然后再问钢笔的颜色,你会看到变化。

用非常简单的术语来说,您所做的类似于:

代码语言:javascript
复制
Pen pen = new Pen(Color.WHITE);
Color color = pen.penColor;
pen.setColor(Color.BLACK);
// color here still refers to Color.WHITE, not Color.BLACK.
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1445929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档