欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

groovy使用范型的坑

程序员文章站 2022-05-28 11:02:04
java的范型 上面的代码在运行时,尽管有类型擦除,但是由于编译期有类型检查,map中的\的类型始终为\,可放心使用。 groovy的范型 上面的代码即使使用了 静态编译注解在编译期也不会报错。由于在运行时有类型擦除,所以func返回的Map的\的数据类型是不确定的,key的类型并不一定为Strin ......

java的范型

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

上面的代码在运行时,尽管有类型擦除,但是由于编译期有类型检查,map中的<key, value>的类型始终为<string, integer>,可放心使用。

groovy的范型

public map<string, integer> func() {
    def map = new hashmap<>()
    map.put('a', 100)
    map.put(1, 200) // 在编译期不会报错
    map
}

上面的代码即使使用了@compilestatic静态编译注解在编译期也不会报错。由于在运行时有类型擦除,所以func返回的map的<key, value>的数据类型是不确定的,key的类型并不一定为string,比如使用map.get('1')来查询时是获取不到键值对的,这是一个坑点!!!

为了程序的严谨,个人建议使用java的强制类型编码风格,且使用@compilestatic静态编译注解,改写后的代码如下。

public map<string, integer> func() {
    map<string, integer> map = new hashmap<>()
    map.put('a', 100)
    map.put(1, 200) // 在编译期就会报错
    map
}