通配符和泛型方法之间的区别? [Java]

Differences between Wildcard and generic methods? [Java]

我不明白这两种模式之间的区别。通配符只能扩展我的 类 而不是泛型方法吗?但我不认为这是答案。

Java中的通配符表示未知类型,可作为return类型使用。引用OracleJava教程中给出的解释:

The wildcard can be used in a variety of situations: as the type of a parameter, field, or local variable; sometimes as a return type (though it is better programming practice to be more specific). The wildcard is never used as a type argument for a generic method invocation, a generic class instance creation, or a supertype. See this

假设你有一个 List<String>,你会尝试将它传递给接受 List<Object> 的方法,它不会编译(Java 试图保护你免于创建一个此处为运行时异常)。但是,如果您将它传递给接受 List<?> 的方法,它就会这样做。这可能会让您了解通配符的用处。

关键字 extends 用于具有上限的通配符,例如List<? extends Object>。还有一个带下限的通配符:List<? super String>.

如果没有通配符,泛型的整个主题将变得不那么有趣,因为泛型被视为对象(类型擦除)。这意味着可供他们使用的方法并不多。通配符通过限制类型来解决这个问题(因此指定了一个公共接口,其中包括一组可以在对象上调用的公共方法)。