博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
请不要在新代码中使用原生类型(23)
阅读量:5964 次
发布时间:2019-06-19

本文共 991 字,大约阅读时间需要 3 分钟。

hot3.png

1、声明中具有一个或多个类型参数的类或接口叫做泛型类、泛型接口(统称泛型)

  • List
  • 每组泛型定义一组参数化的类型

2、每种泛型都带一个原声态类型

  • 即不带任何实际类型参数的泛型名称
  • List 的原声态类型是 List
  • 如下就是一个原生集合

  • 未作限制,集合里面什么都能更加
  • 编译期不会报错,运行下述代码才会报错
  • 后续提取使用,类型转换会有问题

  • 在声明集合时限定死

  • 这样如下编译期就会报错

3、不提供类型参数,使用集合类型和其他泛型也仍然合法

  • 这样会失掉安全性和表述性所有优势
  • java 允许这样做是为了和之前代码保持兼容性!

4、List是被允许的

  • List 和List区别在于:前者逃避了泛型检查;后者明确告诉编译器,他可以持有任何类型

5、泛型子类型化规则

  • List 是List 的子类型,和List不是一个类型
  • List 会失去安全性,List不会
  • 如下,可以进行编译,编译时会有一条警告(请不要忽视)

6、无限制通配符类型

  • Set的无限制通配符类型为:Set(某个类型的集合)
  • 无限定通配符在创建对象,创建泛型类、接口、方法都不能使用
  • 经常和限定通配符extends,super一起使用
List
list2 = new ArrayList
(); // 只能增加null ,不能插别的任何元素 list2.add(null); test(list2);

7、本条的两个例外:

类文字中必须使用原生态类型

  • 比如 List.class 、String[].class、int.class
  • 不可以使用:List<String.class>、List<?>.class
  • 由于泛型在运行时会被擦除

参数化类型而非无限制通配符上使用instanceOf 都是非法的

  • 无限制通配符上可以使用instanceOf ,效果和原生态类型一样的

1547c59fcaf49819737546064dc780eba38.jpg

8、总结

  • 不要在新代码中使用原生态类型
  • 原生态代码仅仅是为了与引入泛型之前代码兼容和互用提供的
  • Set<Object>是参数化类型,包含任何对象的一个集合(安全)
  • Set<?>通配符类型,只包含某种未知对象的集合(安全)
  • Set 原生态类型,脱离了泛型(不安全)

420d982402d9536d95fee8f1b01c995e931.jpg

转载于:https://my.oschina.net/u/3847203/blog/1827972

你可能感兴趣的文章
解决 Eclipse项目红感叹号
查看>>
用Eclipse搭建Python开发环境
查看>>
linux下修改oracle数据库用户名称和密码
查看>>
shell监控脚本-监控系统负载
查看>>
假如生活欺骗了你
查看>>
ITFriend开发日志20140611
查看>>
FineReport中如何实现自动滚屏效果
查看>>
使用Collections对集合排序
查看>>
系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常...
查看>>
使用flex访问java方法:tomcat+xfire
查看>>
Linux计划任务
查看>>
大众点评信息流基于文本生成的创意优化实践
查看>>
Micropython+STM32制作加速度传感器无线小车
查看>>
深拷贝的传统写法
查看>>
计算机硬件及操作系统基础学习笔记
查看>>
Spring event 使用完全指南
查看>>
Android Studio3 "Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request""
查看>>
kubernetes redis pod CrashLoopBackOff修复心得
查看>>
Vlan的端口属性
查看>>
Beyond Compare 激活解决办法
查看>>