使用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)
换1.8后,把代码重新编译一下,工程clean一下试试