Java 嵌套通配符泛型无法编译 [英] Java nested wildcard generic won't compile
本文介绍了Java 嵌套通配符泛型无法编译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在 Java 泛型中遇到有界嵌套通配符的问题.
I have a problem with bounded nested wildcards in Java generics.
这是一个常见的案例:
public void doSomething(Set<? extends Number> set) {}
public void callDoSomething() {
Set<Integer> set = new HashSet<Integer>();
doSomething(set);
}
这是标准的 Java 泛型,工作正常.
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);
}
这会导致编译器错误.
我尝试了各种类型转换和通配符排列,但无法正常工作.我不记得以前见过这个问题,而且我已经使用泛型多年了.我是不是太累了,错过了一些明显的东西?
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?
推荐答案
所以问题是,doSomething
可以实现为:
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.
大概是这样的:
public void doSomething(Map<String, ? extends Set<? extends Number>> map) {}
这篇关于Java 嵌套通配符泛型无法编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文