Java 下面使用(?extends aClass)的代码把我弄糊涂了

Java 下面使用(?extends aClass)的代码把我弄糊涂了,java,generics,Java,Generics,根据我的理解(显然需要更正),映射应该采用整数类及其所有子类。Location类也是如此 Map<? extends Integer, ? extends Location> test2 = new HashMap<>(); test2.put(new Integer(5), new Location(1, "Test2", exits)); Map引用 可以使用上界通配符来放宽对变量的限制。例如,假设您想编写一个在List、List和List上工作的方法;可以通过使用

根据我的理解(显然需要更正),映射应该采用整数类及其所有子类。Location类也是如此

Map<? extends Integer, ? extends Location> test2 = new HashMap<>();
test2.put(new Integer(5), new Location(1, "Test2", exits));
Map引用

可以使用上界通配符来放宽对变量的限制。例如,假设您想编写一个在
List
List
List
上工作的方法;可以通过使用上界通配符来实现这一点

上界通配符,
引用

可以使用上界通配符来放宽对变量的限制。例如,假设您想编写一个在
List
List
List
上工作的方法;可以通过使用上界通配符来实现这一点


上边界通配符,<代码> < P>这可以用较小的例子更好地解释,让我们采用一个具有泛型参数的方法:<代码> MAP

public static void m1(Map<? extends Number, ? extends Object> test2) {

}

?扩展数字
并不意味着映射可以包含
数字
或其子对象,它意味着可以创建
映射
,键为
数字
,或者它是子对象。哪个值也与
相同?扩展对象< /代码> <代码>对象< /代码>,或者是子的

,这可以用小的例子更好地解释,让我们采用一个具有泛型参数的方法:<代码> MAP< /Calp>

public static void m1(Map<? extends Number, ? extends Object> test2) {

}

?扩展数字
并不意味着映射可以包含
数字
或其子对象,它意味着可以创建
映射
,键为
数字
,或者它是子对象。哪个值也与
相同?扩展对象
对象
或其子对象

A
列表
?扩展整数
表示“Integer的一些未知的、特定的子类
。除了@JBNizet的评论,我再强调也不为过:如果你在学习泛型和/或OOP原理,不要试图学习使用Integer或Number之类的类,也不要使用classA之类的贫乏名称。人们会对它们产生太多的困惑。更好的做法是遵循评论中的示例,学习创建真实世界的类型,如水果、动物等。
列表
?扩展整数
表示“Integer的一些未知的、特定的子类
。除了@JBNizet的评论,我再强调也不为过:如果你在学习泛型和/或OOP原理,不要试图学习使用Integer或Number之类的类,也不要使用classA之类的贫乏名称。人们会对它们产生太多的困惑。更好的做法是遵循评论中的例子,学习创建真实世界的类型,如水果、动物等。