gpt4 book ai didi

java - 泛型和集合 - 类型未定义的方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:04:18 28 4
gpt4 key购买 nike

我正在做一个项目,我有点卡在其中的一个方面。我需要创建一个可以操作其他类实例集合的类。作为其中的一部分,它为每个实例创建一个包装器对象,该对象不仅要能够保存实例,还要对其执行某些操作(包括 equals/hashcode)。

因此构造函数不仅采用包装对象,还采用调用者告诉我们可以按所需方式执行这些操作的函数对象(这可能与包含对象的 native 行为不同)。

顺便说一句,我知道我在这里描述的内容听起来像是我在重新发明 Collections 框架的一部分,但我在这里进行了简化。


public class MapWrapper<K,V> {
private class KeyWrapper<K> {
K key;
public KeyWrapper(K key) {
// ...
}
}
private class ValueWrapper<V> {
V value;
public ValueWrapper(V value) {
// ...
}
}

// ...
HashMap<KeyWrapper<K>, ValueWrapper<V>> map
= new HashMap<KeyWrapper<K>, ValueWrapper<V>> ();
// ...

到目前为止一切似乎都很好,但我似乎无法将条目添加到我包含的 map 中:


public MapWrapper (HashMap<K, V> map) {
// ...
map.put(new KeyWrapper<K>(key), new ValueWrapper<V>(val));
// ...
}

编译失败,并显示以下消息:

    “HashMap 类型中的方法 put(K, V) 不适用于参数(HashPlus.KeyWrapper、HashPlus.ValueWrapper)

我很茫然。这种类型的删除在起作用吗?我不这么认为 - 它们都在同一个编译单元中,并且不会下降到 HashMap<Object,Object> - 它正在下降到 HashMap<K,V> ,这看起来很奇怪。

想法?明显遗漏的指针?

更新和解决方案:根据几个响应者的建议,我将原来的“添加”行替换为:


this.map.put(new KeyWrapper<K>(key), new ValueWrapper<V>(val));

这解决了我的问题。注意:一位响应者建议我不需要在 put 行上参数化 KeyWrapper 和 ValueWrapper,但是删除它会产生“原始类型”警告,所以我把它们留在了里面。

感谢大家。

最佳答案

错误说明了一切。您要查找的方法称为 put,而不是 add

关于java - 泛型和集合 - 类型未定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519674/

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