Java通用方法通配符不匹配问题

Ste*_*ose 3 java generics

我想要实现的基本功能是将引用列表映射List<Ref<Thing>>到实际对象的列表,但是由超类给出List<SuperThing>.在这个例子中,Thing extends SuperThingRef<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通配符结构,但是我做错了什么?

wrm*_*wrm 5

如果您将"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)