List<? extends SomeClass> 是什么意思?

Say*_*iss 3 java generics covariance contravariance protocol-buffers

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

java.util.List<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> foo();
Run Code Online (Sandbox Code Playgroud)

但什么剂量<?extends意思?我能理解List<SomeClass>我不能理解List<? extends SomeClass>..

小智 7

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

1) 上界通配符。像:ArrayList <? extends Number> p,这意味着您可以使用任何扩展数字来填充 ArrayList。

2)下界通配符。like: ArrayList<? super Integer> list,这意味着你必须传递任何是Integer的超类(例如Number,Object)来填充ArrayList。

有关更多信息,请参阅通配符


Chr*_*fer 3

这是一个通用声明。

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

<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder>意思是“允许扩展的每个类DestInfoOrBuilder