Or *_*ser 29 java generics polymorphism
所以我查看了一些Java代码并偶然发现:
List<? extends SomeObject> l;
Run Code Online (Sandbox Code Playgroud)
基本上这个列表接受SomeObject的某些对象 - SomeObject本身或其继承者.但是根据多态性,它的继承者也可以像SomeObject一样,所以这也可以:
List<SomeObject> l;
Run Code Online (Sandbox Code Playgroud)
那么,当第二个选项明确定义并且几乎相同时,为什么有人会使用第一个选项?
Ani*_*kur 31
List<SomeObject> l;
Run Code Online (Sandbox Code Playgroud)
在这里你不能说List<SomeObject> l = new ArrayList<SubClassOfSomeObjectClass>;(不允许)为
List<? extends SomeObject> l;
Run Code Online (Sandbox Code Playgroud)
你可以说
List<? extends SomeObject> l = new ArrayList<SubClassOfSomeObject>;(允许)
但请注意,List<? extends SomeObject> l = new ArrayList<SubClassOfSomeObject>;你不能在列表中添加任何内容,因为?代表未知类(当然无效).
更新: 在评论中提问What could I possibly do with a list if I cannot add anything to it?
现在考虑一种情况,你必须编写一个函数来打印你的列表,但请注意,它必须只接受一个List,它有一些对象是SomeObject的子类.在这种情况下,如上所述,你不能使用
public void printList(List<SubClassOfSomeObjectClass> someList)
那你会怎么做?你会做的事情
public void printList(List<? extends SomeObject> someList) {
for(SomeObject myObj : someList) {
//process read operations on myObj
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4026 次 |
| 最近记录: |