作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一个项目,我有点卡在其中的一个方面。我需要创建一个可以操作其他类实例集合的类。作为其中的一部分,它为每个实例创建一个包装器对象,该对象不仅要能够保存实例,还要对其执行某些操作(包括 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<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/
我是一名优秀的程序员,十分优秀!