List接收或返回多種List參數類型

List<?>範型,範型通配符的使用<?>,`?`是類型實參,而不是類型形參,此處的`?`和Number、String、Integer一樣都是一種實際的類型,可以把`?`看成所有類型的父類。是一種真實的類型。可以解決當具體類型不確定的時候,使用通配符`?`。List<?>一般作爲參數來接收外部集合,或者返回一個具體元素類型的集合。

一個應用例子:

public void test2() {
    List<?> resultList;
    List<ImgSearchDTO> imgSearchDTOList =(List<ImgSearchDTO>) getList("DTO");
    List<ImgSearchParam> imgSearchParamList = (List<ImgSearchParam>) getList("param");

    //示例1:
    //範型通配符模擬-接收參數1
    resultList = imgSearchDTOList;
    for (Object item : resultList) {
        ImgSearchDTO itemDTO = (ImgSearchDTO) item;
        System.out.println(itemDTO.getRootCategory());
    }
    //範型通配符-模擬返回參數,並強制轉換爲目標類型
    List<ImgSearchDTO> dtoList = (List<ImgSearchDTO>) resultList;
    for (ImgSearchDTO item : dtoList) {
        System.out.println(item.getRootCategory());
    }

    //示例2:
    resultList = imgSearchParamList;
    for (Object item : resultList) {
        ImgSearchParam itemParam = (ImgSearchParam) item;
        System.out.println(itemParam.getCategory());
    }
    List<ImgSearchParam> paramList = (List<ImgSearchParam>) resultList;
    for (ImgSearchParam item : paramList) {
        System.out.println(item.getCategory());
    }
}
public static List<?> getList(String type) {
    List<ImgSearchDTO> imgSearchDTOList = new ArrayList<>();
    List<ImgSearchParam> imgSearchParamList = new ArrayList<>();

    ImgSearchDTO imgSearchDTO1 = new ImgSearchDTO();
    ImgSearchDTO imgSearchDTO2 = new ImgSearchDTO();
    imgSearchDTO1.setRootCategory("DTO_test1");
    imgSearchDTO2.setRootCategory("DTO_test2");
    imgSearchDTOList.add(imgSearchDTO1);
    imgSearchDTOList.add(imgSearchDTO2);

    ImgSearchParam imgSearchParam1 = new ImgSearchParam();
    ImgSearchParam imgSearchParam2 = new ImgSearchParam();
    imgSearchParam1.setCategory("param_test1");
    imgSearchParam2.setCategory("param_test2");
    imgSearchParamList.add(imgSearchParam1);
    imgSearchParamList.add(imgSearchParam2);

    if (type.equals("DTO")) {
        return imgSearchDTOList;
    } else {
        return imgSearchParamList;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章