Map>

2024-01-10

Java 为我提供了<? extends class>一种过滤 java 类的方法,您可以使用它 在本例中构建新的 HashMap,例如:

我可以这样做:

Map<String,? extends Serializable> map1 = new HashMap<String,String>();

这是正确的,因为 String 实现了 Serialized,所以编译器让我这样做。

但是当我尝试这样做时:

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>>();

嵌套通配符与顶级通配符有很大不同 - 只有后者执行通配符捕获 http://docs.oracle.com/javase/tutorial/java/generics/capture.html。因此,HashMap<String, GenericClass<String>>被认为不可转换为Map<String, GenericClass<? extends Serializable>>, 因为GenericClass<? extends Serializable>是一个具体类型参数(并且因为泛型不是协变的 https://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p).

有关嵌套通配符的更多信息,请参阅此文章:泛型方法上的多个通配符使 Java 编译器(和我!)非常困惑 https://stackoverflow.com/questions/3546745/multiple-wildcards-on-a-generic-methods-makes-java-compiler-and-me-very-confu/3547372#3547372

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Map> 的相关文章

随机推荐