Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何";铸造;HashMap<;双亲,双亲>;到HashMap<;儿童,双倍>;_Java_Generics_Hashmap - Fatal编程技术网

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(…)
?你可以,但为什么要在没有逻辑真正关心的情况下添加约束呢?