Java 如何";铸造;HashMap<;双亲,双亲>;到HashMap<;儿童,双倍>;
我有这样的情况:Java 如何";铸造;HashMap<;双亲,双亲>;到HashMap<;儿童,双倍>;,java,generics,hashmap,Java,Generics,Hashmap,我有这样的情况: 公共抽象类父类{ 公共父项(){} } 公共类子级扩展父级{ 公共儿童(){ } } 公共班机{ 公共静态void main(字符串[]args){ HashMap mapChild=新HashMap(); HashMap mapParent=新HashMap(); foo(mapChild,new Child());//错误的1参数类型 foo(mapParent,newchild()); } 公共静态void foo(HashMap x,父){ x、 put(母公司,5.0
公共抽象类父类{
公共父项(){}
}
公共类子级扩展父级{
公共儿童(){
}
}
公共班机{
公共静态void main(字符串[]args){
HashMap mapChild=新HashMap();
HashMap mapParent=新HashMap();
foo(mapChild,new Child());//错误的1参数类型
foo(mapParent,newchild());
}
公共静态void foo(HashMap x,父){
x、 put(母公司,5.0);
}
}
此代码不起作用,因为foo(mapChild,newchild())
说“参数类型错误”。我尝试了一些使用通配符的东西,但我认为它无法使用它。我可以创建第二个foo方法,但我不想重复代码 有什么想法吗?使用
使用
我相信你想要的是
public static <T> void foo(Map<T, Double> x, T t) {
x.put(t, 5.0);
}
publicstaticvoidfoo(映射x,T){
x、 put(t,5.0);
}
…不要把父对象
对象放在映射中
我相信你想要的是
public static <T> void foo(Map<T, Double> x, T t) {
x.put(t, 5.0);
}
publicstaticvoidfoo(映射x,T){
x、 put(t,5.0);
}
…不实际将父对象
对象放入映射
PEC中。佩克斯。这实际上是错误的做法。最好在第二个参数(parent
)中使方法foo(…)
通用,并将Map
设置为,他说了任何想法。那是我的。只是想让你知道,如果没有第一句话,你的评论会更好。我们都在这里分享想法。具有不同的水平和技能。我没有想到公认的解决办法。我很高兴其他人这么做了。这实际上是错误的做法。最好在第二个参数(parent
)中使方法foo(…)
通用,并将Map
设置为,他说了任何想法。那是我的。只是想让你知道,如果没有第一句话,你的评论会更好。我们都在这里分享想法。具有不同的水平和技能。我没有想到公认的解决办法。我很高兴其他人这么做了。更好的是Map@Turing85:不。对于这个用例,它们是等价的T
将被提升到适当的类型。请确认。我花了一些时间说服自己,但似乎将扩展到
和超级
到泛型参数是多余的。让T像这样扩展父级
是否正确/有用:公共静态void foo(…)
?您可以,但是,为什么要在没有任何逻辑真正关心的情况下添加约束呢?最好是Map@Turing85:不。对于这个用例,它们是等价的T
将被提升到适当的类型。请确认。我花了一段时间说服自己,但似乎将扩展
和超级
到泛型参数是多余的。让T像这样扩展父级
是否正确/有用:公共静态void foo(…)
?你可以,但为什么要在没有逻辑真正关心的情况下添加约束呢?