Java 类型不匹配:无法从列表转换<;捕获#2-of?扩展IDto>;列出<;以下响应到>;
我有一个接口Java 类型不匹配:无法从列表转换<;捕获#2-of?扩展IDto>;列出<;以下响应到>;,java,oop,inheritance,Java,Oop,Inheritance,我有一个接口IDto和followerresponsedto实现IDto。我在一个名为AbstractController的类中有一个这样的方法: protected final List<? extends IDto> findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response){ final Page<T> resultPage = getService(
IDto
和followerresponsedto
实现IDto
。我在一个名为AbstractController
的类中有一个这样的方法:
protected final List<? extends IDto> findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response){
final Page<T> resultPage = getService().findAllPaginatedAndSortedRaw(page, size, sortBy, sortOrder);
if (page > resultPage.getTotalPages()) {
throw new ResourceNotFoundException();
}
return DtoEntityConverter.convertToResponseDtoList(Lists.newArrayList(resultPage.getContent()));
}
public class FollowingController extends AbstractReadOnlyController<Following> {
@Override
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<FollowingResponseDto> findAllPaginatedAndSorted(
final int page,
final int size,
final String sortBy,
final String sortOrder,
final UriComponentsBuilder uriBuilder, final HttpServletResponse response) {
return findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response);
}
}
最后,我有一个类扩展了AbstractController
:
protected final List<? extends IDto> findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response){
final Page<T> resultPage = getService().findAllPaginatedAndSortedRaw(page, size, sortBy, sortOrder);
if (page > resultPage.getTotalPages()) {
throw new ResourceNotFoundException();
}
return DtoEntityConverter.convertToResponseDtoList(Lists.newArrayList(resultPage.getContent()));
}
public class FollowingController extends AbstractReadOnlyController<Following> {
@Override
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<FollowingResponseDto> findAllPaginatedAndSorted(
final int page,
final int size,
final String sortBy,
final String sortOrder,
final UriComponentsBuilder uriBuilder, final HttpServletResponse response) {
return findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response);
}
}
public类followController扩展AbstractReadOnlyController{
@凌驾
@RequestMapping(method=RequestMethod.GET)
@应答器
公共列表FindAllPaginatedSorted(
最后一页,
最终整数大小,
最后一个字符串排序,
最后的字符串排序器,
最终UriComponents构建器uriBuilder,最终HttpServletResponse响应){
返回findPaginatedAndSortedInternal(页面、大小、排序方式、排序器、uriBuilder、响应);
}
}
调用返回findPaginatedAndSortDinternal(页面、大小、排序方式、排序器、uriBuilder、响应)以下控制器中的代码>给了我编译错误:
类型不匹配:无法从列表转换为列表
我哪里出错了?请注意,问题仍然是为什么您的内部方法使用接口,而公开的方法使用具体的类。通常情况下是相反的。如果可能的话,我建议将findallpaginatedandsordered
的返回类型更改为List,请注意,问题仍然是为什么您的内部方法使用接口,而公开的方法使用具体类。通常情况下是相反的。如果可能的话,我建议将findallpaginatedandsordered
的返回类型改为list。我想我希望返回类型为具体类的原因只是为了在查看控制器时清楚返回什么。我试图实现的东西不值得这么明显吗?我想我希望返回类型是具体类的原因是,在查看控制器时,返回的内容非常清楚。我努力实现的目标是否不值得这样的关注?
return (List<FollowingResponseDto>)(List<?>)findPaginatedAndSortedInternal(...);
var idtoList = findPaginatedAndSortedInternal(...);
var followingResponseDtoList = new ArrayList<FollowingResponseDto>();
for (var idto : idtoList) {
if (idto instanceof FollowingResponseDto)
followingResponseDtoList.add((FollowingResponseDto)idto);
}
return followingResponseDtoList;