黑马程序员_日记53_泛型应用在自定义类的对象上
来源:互联网 发布:淘宝照片怎么处理 编辑:程序博客网 时间:2024/06/08 05:46
——- android培训、java培训、期待与您交流! ———-
三、引用数据类型的自定义复杂对象
2 先建立一个Person
3 再建立一个Student继承Person
4 ArrayList al = new ArrayList();
左边声明本集合是接受Person的,但是右边只传了Student,
同时在语法上下面如果调用add()方法添加了Person类的子类对象Worker也是可以的,
但是这就出现了安全问题!
因为在Student集合中竟然出现了Worker,这就产生了严重的安全问题!
所以:编译无法通过,左右两边类型不一致!
编译时候会给出这样的提示:
^
需要: ArrayList
找到: ArrayList
原因: 无法通过方法调用转换将实际参数ArrayList转换为ArrayList
1 个错误
四、泛型没有使用限定范围
import java.util.*;class GenericDemo6{ public static void main(String[] args) { ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("abc1")); al.add(new Person("abc2")); al.add(new Person("abc3")); //printColl(al); ArrayList<Student> al1 = new ArrayList<Student>(); al1.add(new Student("abc--1")); al1.add(new Student("abc--2")); al1.add(new Student("abc--3")); printColl(al1); //ArrayList<Person> al = new ArrayList<Student>();错误:左右两边类型不一致,怎么解决呢?<? extends Person> } public static void printColl(ArrayList<Person> al) { Iterator<Person> it = al.iterator(); while(it.hasNext()) { System.out.println(it.next().getName()); } }}class Person{ private String name; Person(String name) { this.name = name; } public String getName() { return name; }}class Student extends Person{ Student(String name) { super(name); }}
如果想让左右两边不一致,同时还能通过编译,并且没有安全隐患,该怎么解决呢??
使用
五、使用了泛型限定上限
import java.util.*;class GenericDemo6{ public static void main(String[] args) { ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("abc1")); al.add(new Person("abc2")); al.add(new Person("abc3")); printColl(al); ArrayList<Student> al1 = new ArrayList<Student>(); al1.add(new Student("abc--1")); al1.add(new Student("abc--2")); al1.add(new Student("abc--3")); printColl(al1); //ArrayList<? extends Person> al = new ArrayList<Student>();error左右两边类型不一致,怎么解决呢?<? extends Person> } public static void printColl(ArrayList<? extends Person> al)//能够接受Person和Person的子类对象 { Iterator<? extends Person> it = al.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }}class Person{ private String name; Person(String name) { this.name = name; } public String getName() { return name; } //覆盖toString public String toString() { return name; }}class Student extends Person{ Student(String name) { super(name); }}
小结:
0 0
- 黑马程序员_日记53_泛型应用在自定义类的对象上
- 黑马程序员_日记49_泛型定义在类上
- 黑马程序员_日记50_泛型定义在方法上
- 黑马程序员_日记51_泛型定义在接口上
- 黑马程序员_日记58_HashMap自定义对象存取练习
- 黑马程序员_日记59_TreeMap自定义对象练习
- 黑马程序员_面向对象的应用
- 黑马程序员_日记47_泛型概述
- 黑马程序员_日记48_泛型基本使用
- 黑马程序员_学习日记十六_基础加强之泛型、类加载器
- 黑马程序员_泛型应用小结
- 黑马程序员_面向对象(上)
- 黑马程序员_面向对象(上)
- 黑马程序员_面向对象上
- 黑马程序员_面向对象上
- 黑马程序员_日记70_System类
- 黑马程序员_日记42_HashSet自定义对象去重练习
- 黑马程序员_Java基础_泛型应用 和 基本数据类型对象包装类
- jetty-runner.jar指定端口运行war包
- 二叉树的三种递归遍历实现
- 从小到大排序
- 排序算法
- 走进微信的神奇世界--微信公众平台开发者
- 黑马程序员_日记53_泛型应用在自定义类的对象上
- Android字符串资源及其格式化
- Python GUI 07----Listbox
- 信息传递方式之handler备份
- vlc的应用之八:MFC调用libvlc.dll
- ubuntu下下载及编译chromium源代码
- Docker基础知识系列
- Android应用程序 --- WakeLock 保持后台唤醒状态
- 绑定的方式调用服务的方法