gpt4 book ai didi

java - 创建不可变通用对象的 HashMap

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:04 25 4
gpt4 key购买 nike

我不认为有一种方法可以有效地(如果有的话)这样做,但我想我会问一下以防其他人知道。我正在寻找创建自己的缓存/查找表。为了让它尽可能有用,我希望它能够存储通用对象。这种方法的问题在于,即使您可以制作 Collections.unmodifiableMap, immutableMap, etc ,这些实现只会阻止您更改 Map 本身。它们不会阻止您从 map 中获取值并修改其基础值。本质上,我需要的是达到 HashMap<K, ? extends Immutable> 效果的东西,但据我所知,这样的事情不存在。

我原本以为我可以在get方法中只返回缓存中值的副本,但由于Java的Cloneable界面被顶起,无法简单调用

public V getItem(K key){
return (V) map.get(k).clone();
}

最佳答案

您的想法很好,您说得对,没有处理不可变性的内置方法。

不过,你可以试试这个:

interface Copyable<T> {
T getCopy();
}

然后覆盖 get() 方法以返回副本而不是值本身;

class CopyMap<K, V extends Copyable<V>> extends HashMap<K, V> {
@Override
public V get(Object key) {
return super.get(key).getCopy();
}
}

然后由实现返回其自身的副本,而不是 this(除非类本身是不可变的)。尽管您不能在代码中强制执行这一点,但您有权公开羞辱不符合规范的程序员。

关于java - 创建不可变通用对象的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20767068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com