java – 泛型和集合 – 类型未定义的方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 泛型和集合 – 类型未定义的方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1644字,纯文字阅读大概需要3分钟。
内容图文
我正在研究一个项目,我对它的某个方面略有不满.我需要创建一个可以操作其他类实例集合的类.作为其中的一部分,它为每个实例创建一个包装器对象,它必须不仅能够保存实例,还能对其执行某些操作(包括equals / hashcode).
因此构造函数不仅包含包装对象,还包含调用程序告诉我们可以按照所需方式执行这些操作的函数对象(这可能与包含对象的本机行为不同).
顺便说一下,我知道我在这里描述的内容听起来像是在重新构建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>> ();
// ...
到目前为止,一切似乎都没问题,但我似乎无法在我包含的地图中添加条目:
public MapWrapper (HashMap<K, V> map) {
// ...
map.put(new KeyWrapper<K>(key), new ValueWrapper<V>(val));
// ...
}
编译失败,显示以下消息:
“在HashMap< K,V>类型中放置(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,但删除它会产生“原始类型”警告,所以我把它们留在了.
谢谢大家.
解决方法:
>它是放(…)不添加(..)
>您正在尝试将KeyWrapper和ValueWrapper添加到map参数,而不是map字段.使用this.map.put(..)
>您不需要参数化KeyWrapper和ValueWrapper. K和V已经可以通过MapWrapper获得
内容总结
以上是互联网集市为您收集整理的java – 泛型和集合 – 类型未定义的方法全部内容,希望文章能够帮你解决java – 泛型和集合 – 类型未定义的方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。