当通配符的形式为 <? 扩展捕获时,无法将参数传递给方法 ? 扩展标识>



我有一个定义如下的接口:

public interface MyApi<T extends Identity>

一种方法是:

List<ReadApiResponse<? extends T>> read(ReadApiRequest request);

在我的调用类中,我有一个私有方法,它应该对read结果进行操作,其签名是:

public MyClass<T extends Identity> {
private List<T> sortResults(List<ReadApiResponse<? extends Identity>> response) {
// Do something here
}
}

我尝试调用私有方法:

var results = read(request);
List<T> sortedResults = sortResults(results);

但我得到的信息是:

'sortResults(java.util.List<com.mypackage.ReadApiResponse<? extends com.mypackage.Identity>>)' in '...' cannot be applied to '(java.util.List<com.mypackage.model.ReadApiResponse<? extends capture<? extends com.mypackage.Identity>>>)'

我在这里做错了什么?我试着用Intellij的问题解决方案建议来抛出它,它也抛出了一个错误

如果像下面这样更改通配符泛型类型约束,那么应该更容易使用:

public interface MyApi<T extends Identity> {
List<ReadApiResponse<T>> read(ReadApiRequest request);
}
public class MyClass<T extends Identity> {
private List<T> sortResults(List<ReadApiResponse<T>> response) {
// Do something here
}
}

请注意,根据使用情况和类型Identity,这可能会消除使用通配符类型约束所获得的一些灵活性。如果没有更多的背景,就无法确定这是否重要。

最新更新