20170507@ 泛型进阶
来源:互联网 发布:数据分析师证书考试 编辑:程序博客网 时间:2024/06/01 08:54
带有泛型的类:
ArrayList<E>
E:element,元素,实际代表一个变量,接收一个数据类型(代表一个比较广泛的数据类型)。
带有泛型的方法:
public boolean add(E e){}
应用举例
//创建集合并添加元素ArrayList<Integer> array = new ArrayList<Integer>(); array.add(365); array.add(673); array.add(715); //产生一个数组作参数 Integer[] in = new Integer[array.size()]; //使用带泛型的方法集合转数组 Integer[] result = array.toArray(in); //增强for循环遍历数组 for(Integer i : result){ System.out.println(i); }
带有泛型的接口:
List<E>
实现类在实现接口的时,有两种可选择的方式。
1.实现接口时,不处理泛型。
public class ArrayList<E> implements List<E>{}//这种情况下,调用者在调用ArrayList类时new ArrayList<Integer>()
相当于在后期创建集合对象时,再指定数据类型。
2.实现接口时,处理泛型。
public class XX<Integer> implements List<Integer>{}//这种情况下,调用者在调用ArrayList类时,不能写数据类型了new XXX
这两者相比,前者更为灵活,后者把数据类型写死了。
使用泛型的好处:
1.更安全 。
2.避免强制类型转换 。
3.代码中的错误在编译时就可以发现。
4.带来了传说中的增强for。
泛型的通配符:
?
ArrayList<String> array = new ArrayList<String>(); HashSet<Integer> set = new HashSet<Integer>(); array.add("lc"); array.add("ccc"); set.add(132); set.add(321); iterator(array); iterator(set); //要求定义一个方法,可以同时迭代这两个集合 //参数:不可以写ArrayList,HashSet。只能共同实现的接口Collection。 public static void iterator(Collection<?> coll){ Iterator<?> it =coll.iterator(); while(it.hasNext()){ System.out.println(it.next()); }
运行结果:
lcccc321132
更多…
(这里只列出部分代码)
//要求://将酒店的初始,服务员,经理,存储在三个集合中。//再定义一个方法,可以同时遍历三个集合,还可以调用它们的工作方法。 ArrayList<Cook> cook = new ArrayList<Cook>(); ArrayList<Waiter> waiter = new ArrayList<Waiter>(); ArrayList<Manager> manager = new ArrayList<Manager>(); cook.add(new Cook("张三","后厨001")); cook.add(new Cook("李四","后厨002")); cook.add(new Cook("王五","后厨003")); waiter.add(new Waiter("翠花","服务员001")); waiter.add(new Waiter("酸菜","服务员002")); manager.add(new Manager("小明","董事会001")); manager.add(new Manager("小强","董事会002")); iterator(cook); iterator(waiter); iterator(manager); //参数是一个比较严重的问题,因为要调用work方法,但使用通配符以后就只能是Object类型,还不可以强制类型转换(会出问题) //所以考虑传递一个Career的子类对象 //泛型的限定:本案例中,父类是固定的,子类是很多很多的。 public static void iterator(ArrayList<? extends Career> array){ //ArrayList<? extends Career> //泛型限制了父类,成为上限限定,可以传递本类,可以传递子类 Iterator<? extends Career> it = array.iterator(); while(it.hasNext()){ Career career = it.next(); career.work(); }
运行结果
厨师的工作是炒菜。
厨师的工作是炒菜。
厨师的工作是炒菜。
服务员的工作是做一些基础的工作。
服务员的工作是做一些基础的工作。
经理的工作是统筹和管理。
经理的工作是统筹和管理。
0 0
- 20170507@ 泛型进阶
- Java泛型进阶
- 【java进阶】初探泛型
- c++ 进阶 泛型编程
- Csharp进阶:泛型集合
- Java进阶--Java泛型总结
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- 进阶
- Java之泛型进阶——泛型通配符
- Spark源码学习笔记5-RpcEnv(Rpc抽象层)
- 模仿东京首页banner轮播,京东新闻上下滚动动画实现(动画实现)
- POJ 3281 Dining
- LeetCode[517] Super Washing Machines
- Extjs 组件查找
- 20170507@ 泛型进阶
- [FAQ05657][SAT]如何动态修改SIM卡应用名称
- C# 事件传值应用于窗口传值
- hadoop-ha之Hive
- android短信上送验证的实现及问题
- 【Java工具类】----正则表达式校验工具类
- 笔记——JSP(杂)
- linux_grepbak
- 深入理解java虚拟机读书笔记(一): jvm的分类