List 泛型安全的一点感悟
来源:互联网 发布:在淘宝上怎么买微信号 编辑:程序博客网 时间:2024/03/29 18:26
今天刚学了genetic 做了几个实验感觉如下
当我们使用的是泛型安全的机制的时候 jvm离得规范就是在编译的时候进行验证 如果不安全的编译
时不会通过的
还有就是泛型的检查机制就是只检查本身的 这句话的意思就是说
List<Integer> ints = new ArrayList<Integer>();//这个含义就是告诉编译器 ints 这
个变量时<Integer>安全的
List ints = new ArrayList<Integer>();//这个虽然说的是指向的是一个<Integer>安全
的对象 但是本身的限制机制却是List 就是说是什么都没有
如果我们执行的是ints.add("jianke");这个是可以编译通过的
就算我们运行都是可以成功的
这个例子的前提就是必须的进行 类型兼容 也就是说编译器是检查两边的类型是不是兼容
但是当我们这么写的话
List<Integer> ints = new ArrayList<Integer>();
List<Number> num = ints;
ints.add("jianke");
System.out.println(ints.get(0));
这个在运行的时期是会报错的 这是为什么 但是编译器报的不是 不兼容的类型 而是
符号: 方法 add(java.lang.String)
位置: 接口 java.util.List<java.lang.Integer>
ints.add("jianke");
这也就是说编译器会将你的根据你的变量的类型进行将你的方法接口的传入参数进行 规定就是将这个
占位符E改成你的限制类型
如果我们是这么写的话List<Integer> ints = new ArrayList<Integer>();
List<Number> num = ints;
num.add("jianke");
那么他显示的是 符号: 方法 add(java.lang.String)
位置: 接口 java.util.List<java.lang.Number>
ints.add("jianke"); 知道是什么编译器是怎么怎么检查的了
但是当我们这样写的话
List<Integer> ints = new ArrayList<Integer>();
List<Number> num = ints;
就是说去掉最后一行 那么却是显示的是不兼容的类型 这也就是说这个好像告诉我们在泛型中
parameType 是不能向上传递的 这和类的使用不一样的 如果不相信的话可以自己写一个类测试一下
List<Integer> ints = new ArrayList<Integer>();
List<Son> parent = new ArrayList<Son>();
List<Parent> son = parent;
但是如果实验Object 的话也是一样的 这就说明的是不允许继承的参数传递
上文中或许为什么
List<Integer> ints = new ArrayList<Integer>();
List<Number> num = ints;
ints.add("jianke");
和List<Integer> ints = new ArrayList<Integer>();
List<Number> num = ints;
num.add("jianke");
不同的错误可以看出的是编译器检查的机制就是当检查完一个之后 并不是继续进行下一行的检查而是把
这个泛型对象List的在这个main中的的所有的运用都检查一遍 然后再向下有序的检查
- List 泛型安全的一点感悟
- 一点小小的感悟~~
- SNS的一点感悟
- 现代社会的一点感悟
- 而立之年的一点感悟
- 最近的一点感悟
- qobject_cast 的一点感悟
- istream_iterator的一点感悟
- 生活的一点感悟
- 裸辞后的一点感悟
- 武媚娘的一点感悟
- 职业生涯的一点感悟
- 近期的一点感悟
- 编程的一点感悟
- 目前的一点感悟
- J2ME学习的一点感悟
- 出去前的一点感悟
- 程序开发的一点感悟
- (转)淘宝面试的几个算法题
- 蛮有乐趣的
- Perl、PHP、ASP、JSP技术比较
- 怎么获得JavaScript中下拉列表中option的value值
- GCC参数详解
- List 泛型安全的一点感悟
- java中如何用按钮浏览选择地图片存到数据库中?
- 思想飞了
- Java关键字final、static使用总结
- java中堆与栈
- MappingTableAddColumnNames
- Hibernate感悟
- CreateDataCloumnAddDataTable&&CreateDataTableAddDataSet
- 自己做的计算器(参照window自带的记事本) 欢迎学习交流