Java 什么是列表<;?扩展SomeClass>;什么意思?

Java 什么是列表<;?扩展SomeClass>;什么意思?,java,generics,protocol-buffers,covariance,contravariance,Java,Generics,Protocol Buffers,Covariance,Contravariance,我在protobuf生成的java文件中看到了该定义: java.util.List<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> foo(); java.util.List在java泛型编程中,使用通配符时有两种边界 1) 上界通配符。 例如:java泛型代码中的ArrayList,问号(?),称为通配符,表示一种未知类型。通配符可用于多种情况:作为参数、字段或局部变量的类型;有时作为返回类型(尽管更具体一

我在protobuf生成的java文件中看到了该定义:

java.util.List<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> foo();

java.util.List在java泛型编程中,使用通配符时有两种边界

1) 上界通配符。
例如:
java泛型代码中的
ArrayList,问号(?),称为通配符,表示一种未知类型。通配符可用于多种情况:作为参数、字段或局部变量的类型;有时作为返回类型(尽管更具体一些是更好的编程实践)。通配符永远不会用作泛型方法调用、泛型类实例创建或超类型的类型参数

有关更多信息,请阅读和

这是一份声明

它用于在编译时检查类型。您可以将任何对象放入列表中,但这会使维护变得更加困难,如果使用不当,可能会导致
ClassCastException
s


查看参数类型应为
SomeClass
的子类型我试图在回答中解释它,以寻找上界和下界通配符的解释。还有一些指向Java tuts的链接。这将有所帮助。