我在protobuf生成的java文件中看到了这个定义:
java.util.List<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> foo();
但<?
和extends
的剂量是多少?我理解List<SomeClass>
我无法理解List<? extends SomeClass>
..
答案 0 :(得分:3)
在java泛型编程中,使用通配符时有两种边界。
1)上限有界的通配符。
比如:ArrayList <? extends Number> p
,这意味着你可以使用任何extends extends来填充ArrayList。
2)降低有界通配符。
像:ArrayList<? super Integer> list
,
这意味着你必须传递任何Integer的超类(如Number,Object)来填充ArrayList。
有关详细信息,请参阅wildcards。
答案 1 :(得分:1)
在java generic code
中,问号(?),称为通配符,表示未知类型。通配符可用于各种情况:作为参数,字段或局部变量的类型;有时作为返回类型(虽然更好的编程实践更具体)。通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数。
有关详细信息,请参阅Java Generic's Wildcards和Generics: The wildcard operator
答案 2 :(得分:1)
这是generic声明。
它用于在编译时检查类型。您可以将任何对象放入列表中,但这会使维护更加困难,如果使用不合适,可能会导致ClassCastException
。
<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder>
表示“允许每个扩展DestInfoOrBuilder
的课程。