groovy使用范型的坑

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
}

转载于:https://my.oschina.net/u/241305/blog/1923591

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值