groovy使用范型的坑

java的范型

Map map = new HashMap<>(); map.put("a", 100); map.put(1, 200); // 在编译期就会报错

上面的代码在运行时,尽管有类型擦除,但是由于编译期有类型检查,map中的的类型始终为,可放心使用。
groovy的范型
public Map func() { def map = new HashMap<>() map.put('a', 100) map.put(1, 200) // 在编译期不会报错 map }

上面的代码即使使用了@CompileStatic静态编译注解在编译期也不会报错。由于在运行时有类型擦除,所以func返回的Map的的数据类型是不确定的,key的类型并不一定为String,比如使用map.get('1')来查询时是获取不到键值对的,这是一个坑点!!!
【groovy使用范型的坑】为了程序的严谨,个人建议使用java的强制类型编码风格,且使用@CompileStatic静态编译注解,改写后的代码如下。
public Map func() { Map map = new HashMap<>() map.put('a', 100) map.put(1, 200) // 在编译期就会报错 map }

    推荐阅读