java - Map<String,Class< 的声明有问题吗?扩展序列化>>

标签 java generics hashmap extends serializable

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/

相关文章:

java - 有时找不到 Xpath 元素

java Api目录? komodoedit java 自动完成功能

generics - 如何重用泛型函数类型边界?

java - 删除与进程关联的临时文件夹中的文件

java - Java 8中列表的二级过滤

generics - 如何使用消息包序列化或反序列化通用结构?

java - Map 的类型安全合并,其值具有多种类型; `incompatible types java.lang.Object cannot be converted to capture#1 of ?`

java - 使用条件转换 HashMap 中的 Stream

java - 文件中 HashMap 字符串出现次数 [JAVA]

java - JAVA中关联数组的数组