java List〈?extends SomeClass>是什么意思?[duplicate]

b1zrtrql  于 2022-12-25  发布在  Java
关注(0)|答案(3)|浏览(118)
    • 此问题在此处已有答案**:

Java Generics (Wildcards)(7个答案)
List<Map<String, String>> vs List<? extends Map<String, String>>(5个答案)
八年前就关门了。
我在protobuf生成的java文件中看到了这个定义:

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

但是<?extends是什么意思?我能理解List<SomeClass>,我不能理解List<? extends SomeClass>

djp7away

djp7away1#

在java泛型编程中,使用通配符时有两种界限。
1)上限通配符。例如:ArrayList <? extends Number> p,这意味着您可以使用任何扩展Number的内容来填充ArrayList。
2)下限通配符,如:ArrayList<? super Integer> list,这意味着您必须传递Integer超类中的任何内容(如Number、Object)来填充ArrayList。
有关详细信息,请参阅wildcards

vmdwslir

vmdwslir2#

这是一个generic声明。
它用于在编译时检查类型。你可以将任何对象放入列表中,但是如果使用不当,这会使它更难维护,并且可能导致ClassCastException s。
<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder>表示 “允许扩展DestInfoOrBuilder的每个类“

zpqajqem

zpqajqem3#

java generic code中,问号**(?)称为通配符**,表示未知类型。通配符可用于多种情况:作为参数、字段或局部变量的类型;有时作为返回类型(尽管更具体的编程实践更好)。2通配符从不用作泛型方法调用、泛型类示例创建或超类型的类型参数。
有关详细信息,请阅读Java Generic's WildcardsGenerics: The wildcard operator

相关问题