我正在做一个项目,我有点被它的一个方面卡住了。我需要创建一个类,它可以操作其他类的实例集合。作为其中的一部分,它为每个实例创建一个包装器对象,该对象不仅必须能够保存实例,而且还必须能够对其执行某些操作(包括equals/hashcode)。
因此,构造函数不仅接受包装对象,还接受函数对象,调用者告诉我们可以按照所需的方式执行这些操作(这可能不同于包含对象的本机行为)。
顺便说一句,我知道我在这里描述的内容听起来像是在重塑集合框架的一部分,但我在这里简化了。
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>> ();
public MapWrapper (HashMap<K, V> map) {
map.put(new KeyWrapper<K>(key), new ValueWrapper<V>(val));
}
编译失败,出现以下消息:
方法将(K,V)放入HashMap类型<K、 V>不适用于参数(HashPlus.KeyWrapper、HashPlus.ValueWrapper)
HashMap<Object,Object>
-它正在下降到
HashMap<K,V>
,这似乎很奇怪。
思想?指向明显遗漏的指针?
更新和解决方案:
根据几个响应者的建议,我将原来的“添加”行替换为:
this.map.put(new KeyWrapper<K>(key), new ValueWrapper<V>(val));
谢谢大家。