Java 为我提供了 <? extends class>
一种过滤 java 类的方法,您可以使用
在这种情况下构建新的 HashMap,例如:
我能做到:
Map<String,? extends Serializable> map1 = new HashMap<String,String>();
这是正确的,因为 String 实现了 Serializable,所以编译器让我这样做。
但是当我尝试这样做时:
Map<String,GenericClass<? extends Serializable>> map2 = new HashMap<String, GenericClass<String>>();
作为它的 GenericClass:
public class GenericClass<T>
{
.
.
.
}
编译器抛出错误提示:
Type mismatch: cannot convert from HashMap<String,GenericClass<String>> to Map<String,GenericClass<? extends Serializable>>
我想知道,发生了什么事?
也许编译器无法检测到扩展类是泛型的一部分。
最佳答案
您需要使用以下内容:
Map<String, ? extends GenericClass<? extends Serializable>> map2 =
new HashMap<String, GenericClass<String>>();
嵌套通配符与顶级通配符有很大不同 - 只有后者执行 wildcard capture .结果,HashMap<String, GenericClass<String>>
被认为不可转换为 Map<String, GenericClass<? extends Serializable>>
,因为 GenericClass<? extends Serializable>
是具体类型参数(并且因为泛型 aren't covariant )。
有关嵌套通配符的更多信息,请参阅此帖子:Multiple wildcards on a generic methods makes Java compiler (and me!) very confused
关于java - Map<String,Class< 的声明有问题吗?扩展序列化>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17723199/