Java学习升阶 -01-一篇看懂java泛型(2)
2020-11-29 00:43
951 查看
泛型的补充理解:泛型将参数作为变量可以更灵活高效的复用功能相同的业务代码,泛型可以用Object的引用来实现参数"任意化",“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。
那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。
特别强调理解关于泛型通配符?,?代表一个占位符号,表明将来使用时候再指明类型。
这里看两个栗子:
1、定义打印一个集合元素
public static void print(List<?> list){ list.add("test"); //报错,这里对未来使用对类型是无法确定对 for (Object o: list ) { System.out.println(o); } }
2、父类 Animal 和几个子类,如狗、猫等
static int countLegs (List<? extends Animal > animals ) { int retVal = 0; for ( Animal animal : animals ) { retVal += animal.countLegs(); } return retVal; } static int countLegs1 (List< Animal > animals ){ int retVal = 0; for ( Animal animal : animals ) { retVal += animal.countLegs(); } return retVal; } public static void main(String[] args) { List<Dog> dogs = new ArrayList<>(); // 不会报错 countLegs( dogs ); // 报错 countLegs1(dogs); }
所以,对于不确定或者不关心实际要操作的类型,可以使用无限制通配符(尖括号里一个问号,即 ),表示可以持有任何类型。像 countLegs 方法中,限定了上届,但是不关心具体类型是什么,所以对于传入的 Animal 的所有子类都可以支持,并且不会报错。而 countLegs1 就不行。
相关文章推荐
- Java学习日志01
- Java学习日志01
- Java线程学习笔记----01
- java 学习 01(2007/04/18)
- JAVA语言学习_01(字符串相关知识)
- [学习笔记]Java泛型机制(Java 5)
- Java学习笔记01 布局
- Java语言介绍(04)开源项目(11)其它(01)学习
- Java学习基础篇01
- java学习笔记01--数据类型
- 黑马程序员--Java学习01--java简介
- Java_socket程序学习01-一个客户端对一个服务器
- java学习之旅13--运算符_01_算术_逻辑_位运算符_扩展运算符
- Java学习01
- Java学习之路(二)01
- Java基础学习(01学习方法与学习心态)
- 【JAVA学习笔记】01 标志符号、关键字、类型
- 一个java初学者学习路线图——01
- Java特别学习笔记01 - 命名规则和折行规则
- java学习笔记01--数据类型