java8 范型问题

使用java 8时,当一个方法的参数带有范型,返回值有范型时,调用完此方法后紧接着获取返回值中的内容会有编译错误

public class JavaGenerics {

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

    /**
     * 参数没有范型约束
     * @param params
     * @return
     */
    public static List<String> test(List params){
        return null;
    }

    public static void main(String[] args) {
        //不带范型的参数
        Map pamraMap = new HashMap();
        //获取列表没有问题
        List<String> strs = test(pamraMap);
        //通过上步列表获取内容没问题
        String item = strs.get(0);
        //直接获取返回值列表中的元素,编译错误
        item = test(pamraMap).get(0);

        //带范型的参数
        Map<String, String> paramMap2 = new HashMap<>();
        List<String> strs2 = test(paramMap2);
        //可以直接通过返回的列表获取某项元素
        String item2 = test(paramMap2).get(0);

        //调用没有范型约束的方法,编译没有问题
        List paramList = new ArrayList();
        item = test(paramList).get(0);
    }
}

item = test(pamraMap).get(0);这句会报编译错误。为什么?

java环境:

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)

图片描述
图片描述

阅读 2.6k
3 个回答

换1.8后,把代码重新编译一下,工程clean一下试试

你这类型不匹配啊,编译器检查当然过不了

clipboard.png
没有报编译错误吧。你那个test(pamraMap) 返回的null,空指针了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题