第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

類型不匹配:無法從 List<capture#2-of 轉(zhuǎn)換?將 IDto> 擴(kuò)展為

類型不匹配:無法從 List<capture#2-of 轉(zhuǎn)換?將 IDto> 擴(kuò)展為

鴻蒙傳說 2023-08-23 10:40:05
我有一個(gè)接口IDto和FollowingResponseDto實(shí)現(xiàn)IDto。我有一個(gè)在名為的類中看起來像這樣的方法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()));}這是代碼DtoEntityConverter.convertToResponseDtoList:public static List<? extends IDto> convertToResponseDtoList(List<? extends IEntity> entities) {    List<? extends IDto> dtoList = new ArrayList<>();    entities.forEach(e -> e.convertToResponseDto());    return dtoList;}最后,我有一個(gè)擴(kuò)展類AbstractController:public class FollowingController extends AbstractReadOnlyController<Following> {    @Override@RequestMapping(method = RequestMethod.GET)@ResponseBodypublic 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);    }}return findPaginatedAndSortedInternal(page, size, sortBy, sortOrder, uriBuilder, response);FollowingController 中的調(diào)用給了我編譯錯(cuò)誤:Type mismatch: cannot convert from List<capture#2-of ? extends IDto> to List<FollowingResponseDto>我哪里錯(cuò)了?
查看完整描述

1 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊

請注意,問題仍然是為什么您的內(nèi)部方法使用接口,而公開公開的方法使用具體類。通常情況恰恰相反。如果可能的話,我建議將返回類型更改findAllPaginatedAndSorted為List<? extends IDto>。


您不能從List<? extends IDto>to進(jìn)行轉(zhuǎn)換List<FollowingResponseDto>,因?yàn)榍罢呖梢园瑢?shí)現(xiàn)的其他類型IDto,而不僅僅是FollowingResponseDto.


想象一下以下場景:


interface I {}

class A implements I {}

class B implements I {}


List<I> interfaceList = ...;

interfaceList.add(new A());

interfaceList.add(new B());

List<A> aList = interfaceList;  // error! interfaceList contains a B, and a B is not allowed in a list of As

現(xiàn)在您可能會爭辯說您的場景中沒有B,并且List<? extends IDto>僅包含 的實(shí)例FollowingResponseDto。但你的編譯器不知道這一點(diǎn),也不能保證這在未來的任何時(shí)候都不會改變。


要解決此問題,您需要自己進(jìn)行轉(zhuǎn)換。要么在中間做一個(gè)邪惡的轉(zhuǎn)換List<?>,要么創(chuàng)建一個(gè)新的List<FollowingResponseDto>元素并單獨(dú)添加每個(gè)元素List<? extends IDto>:


邪惡的:


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;


查看完整回答
反對 回復(fù) 2023-08-23
  • 1 回答
  • 0 關(guān)注
  • 356 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號