鍍金池/ 問答/Java/ java8 范型問題

java8 范型問題

使用java 8時,當一個方法的參數(shù)帶有范型,返回值有范型時,調(diào)用完此方法后緊接著獲取返回值中的內(nèi)容會有編譯錯誤

public class JavaGenerics {

    /**
     * 方法有范型約束
     * @param params
     * @return
     */
    public static List<String> test(Map<String, String> params){
        return null;
    }

    /**
     * 參數(shù)沒有范型約束
     * @param params
     * @return
     */
    public static List<String> test(List params){
        return null;
    }

    public static void main(String[] args) {
        //不帶范型的參數(shù)
        Map pamraMap = new HashMap();
        //獲取列表沒有問題
        List<String> strs = test(pamraMap);
        //通過上步列表獲取內(nèi)容沒問題
        String item = strs.get(0);
        //直接獲取返回值列表中的元素,編譯錯誤
        item = test(pamraMap).get(0);

        //帶范型的參數(shù)
        Map<String, String> paramMap2 = new HashMap<>();
        List<String> strs2 = test(paramMap2);
        //可以直接通過返回的列表獲取某項元素
        String item2 = test(paramMap2).get(0);

        //調(diào)用沒有范型約束的方法,編譯沒有問題
        List paramList = new ArrayList();
        item = test(paramList).get(0);
    }
}

item = test(pamraMap).get(0);這句會報編譯錯誤。為什么?

java環(huán)境:

java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

圖片描述
圖片描述

回答
編輯回答
孤星

clipboard.png
沒有報編譯錯誤吧。你那個test(pamraMap) 返回的null,空指針了

2017年4月12日 14:28
編輯回答
墨染殤

你這類型不匹配啊,編譯器檢查當然過不了

2017年7月4日 08:00
編輯回答
你的瞳

換1.8后,把代碼重新編譯一下,工程clean一下試試

2018年6月5日 14:24