Java嵌套的通配符通用不会编译 [英] Java nested wildcard generic won't compile
问题描述
我在Java泛型中遇到了有界嵌套通配符的问题。
以下是一个常见的情况:
public void doSomething(Set< ?extends Number> set){}
public void callDoSomething(){
Set< Integer> set = new HashSet< Integer>();
doSomething(set);
}
这是标准的Java泛型,工作正常。 b
但是,如果通配符嵌套,它将不再有效:
public void doSomething(Map< String,Set< ;? extends Number> map){}
$ b public void callDoSomething(){
Map< String,Set< Integer>> map = new HashMap< String,Set< Integer>>();
doSomething(地图);
}
这会导致编译器错误。
我尝试了各种各样的强制转换和通配符排列,但是我无法使其工作。我不记得之前看到过这个问题,而且我已经与仿制药合作了多年。我只是太累了,错过了一些明显的东西?
所以问题是, doSomething
可以实现为:
public void doSomething(Map< String,Set< ;? extends Number>> map ){
Set< Float> set = ...;
map.put(xyz,set);
}
您需要决定您的实际意思。
可能类似于:
public void doSomething(Map< String,?extends Set && extends Number>> map){}
I have a problem with bounded nested wildcards in Java generics.
Here's a common case:
public void doSomething(Set<? extends Number> set) {}
public void callDoSomething() {
Set<Integer> set = new HashSet<Integer>();
doSomething(set);
}
This is standard Java generics, works fine.
However if the wildcard becomes nested, it no longer works:
public void doSomething(Map<String, Set<? extends Number>> map) {}
public void callDoSomething() {
Map<String, Set<Integer>> map = new HashMap<String, Set<Integer>>();
doSomething(map);
}
This leads to a compiler error.
I've tried a variety of casts and wildcard permutations, but I'm unable to get this working. I don't recall seeing this issue before, and I've worked with generics for years. Am I just too tired and missing something obvious?
So the problem is, doSomething
could be implemented as:
public void doSomething(Map<String, Set<? extends Number>> map) {
Set<Float> set = ...;
map.put("xyz", set);
}
You need to decide what you actually mean.
Probably something like:
public void doSomething(Map<String, ? extends Set<? extends Number>> map) {}
这篇关于Java嵌套的通配符通用不会编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!