我想要实现的基本功能是将引用列表映射List<Ref<Thing>>到实际对象的列表,但是由超类给出List<SuperThing>.在这个例子中,Thing extends SuperThing并Ref<Thing>有一个方法public Thing get()来获取引用的对象.
我认为有效的方法:
public <T> List<T> refsToObjects(List<Ref<? extends T>> list) {
List<T> result = new ArrayList<T>();
for(Ref<? extends T> ref : list) {
result.add(ref.get());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用它时
List<Ref<Thing>> refs;
List<SuperThing> objectList = refsToObjects(refs);
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息: The method refsToObjects(List<Ref<? extends T>>) is not applicable for the arguments (List<Ref<Thing>>)
我以前没有主动使用? extends T通配符结构,但是我做错了什么?
如果您将"extended"参数指定为通用参数,它也可以:
public <T, S extends T> List<T> refsToObjects(List<Ref<S>> list) {
List<T> result = new ArrayList<T>();
for(Ref<S> ref : list) {
result.add(ref.get());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |