通配符捕获根据?的定义,编译器对List>i中的元素类型一无所知。通配符并不意味着“任何类型”;它的意思是“某种未知类型”。它知道,例如,通过执行带有整数列表的方法,它从i.get获得一个整数值。这是真的,但正如我上面所说:编译器只能知道–在编译时,记住——i.get(0)返回一个对象,它是?的上限。但不能保证?是运行时对象,所以编译器无法知道i.set(0,i.get(0))是一个安全的调用。就像这样写:List

通配符捕获根据?的定义,编译器对List>i中的元素类型一无所知。通配符并不意味着“任何类型”;它的意思是“某种未知类型”。它知道,例如,通过执行带有整数列表的方法,它从i.get获得一个整数值。这是真的,但正如我上面所说:编译器只能知道–在编译时,记住——i.get(0)返回一个对象,它是?的上限。但不能保证?是运行时对象,所以编译器无法知道i.set(0,i.get(0))是一个安全的调用。就像这样写:List