mak*_*aks 1 java generics casting
我有以下课程:
public class Base {
public int someMethod(){...}
}
public class Derrived extends Base {
@Override
public int someMethod(){...}
}
Run Code Online (Sandbox Code Playgroud)
我也有一个返回的方法 List<Base>
List<Base> method() {
return fetch();
}
Run Code Online (Sandbox Code Playgroud)
方法fetch()返回List<? extends Base>但实际上它包含Derrived类的实例列表
List<? extends Base> fetch() {}
Run Code Online (Sandbox Code Playgroud)
但是定义方法的代码method()将无法编译.它需要铸造List<Base>.如果我总是可以将该集合的实例视为Base类的实例,为什么我需要强制转换它?
A List<? extends Base>与a不同List<Base>,就像一堆香蕉不是水果碗一样.
考虑:
List<Derived> x = new ArrayList<Derived>();
// This is valid...
List<? extends Base> y = x;
// This is what you *want* to be valid
List<Base> z = y;
z.add(new Base());
// This looks fine at compile-time... but what would you expect it to do?
Derived d = x.get(0);
Run Code Online (Sandbox Code Playgroud)
处理a 实例的所有现有元素是一回事- 但是你不能将 a 添加到>,而你可以添加一个.并非每一个都有 .List<Derived>BaseBaseList<BaseList<Derived>List<Derived>List<Base>
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |