我有一个定义如下的接口:
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
,这可能会消除使用通配符类型约束所获得的一些灵活性。如果没有更多的背景,就无法确定这是否重要。