美文网首页
groovy使用范型的坑

groovy使用范型的坑

作者: 童话里的小超人 | 来源:发表于2018-08-07 08:54 被阅读0次

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
}

相关文章

  • groovy使用范型的坑

    java的范型 上面的代码在运行时,尽管有类型擦除,但是由于编译期有类型检查,map中的的...

  • PhpStan

    Trait 范型支持 使用 @uses phpdoc 定义最终的范型类型 还没有实现: 见 https://git...

  • Rust范型(2) - 范型约束

    trait中的范型 在定义trait时,可以使用范型: Dagongren是一个trait,包含了banzhuan...

  • 范型 T的使用

    public T findView ( @IdRes intid) {return...

  • iOS范型

    范型使用场景:1、在集合(数组,字典,NSSet)中使用范型比较常见2、当声明一个类,类里边的某些属性的类型不确定...

  • Groovy开发套件-处理IO

    http://groovy-lang.org/groovy-dev-kit.html 1.使用IO Groovy提...

  • Gradle入门系列(二)——groovy高级语法

    groovy高级语法 一、json操作 使用groovy自带的json工具进行json操作 groovy.json...

  • Groovy简介与使用

    简介使用应用 Groovy语法特性(相比于Java) Groovy与Java项目集成使用GroovyShellGr...

  • Gradle开发-Groovy环境搭建

    ##Groovy环境搭建 在使用 Groovy 之前首先要搭建几个环境: Groovy 的环境搭建 JDK 环境搭...

  • 当范型遇到可选型How to determine if a ge

    前提:Optional是一个具体类型,无法用作范型类型的约束。 问题一:使用了范型的方法里,如何知道是否是一个可选...

网友评论

      本文标题:groovy使用范型的坑

      本文链接:https://www.haomeiwen.com/subject/qjfovftx.html