【Java学习笔记】37:泛型使用时要注意的约束
来源:互联网 发布:手机桌面图标转换软件 编辑:程序博客网 时间:2024/06/05 02:39
约束1:不能使用基本类型来作为泛型的抽象类型的实际参数
这是因为在JVM中是没有抽象类型的,所以泛型中的抽象类型会被替换成Object类型(该行为叫擦除),而基本类型不能直接赋值给Object类型,要使用基本类型则要使用它们的封装类。
需要注意的是:
Object obj=1;
虽然是可行的写法,但这涉及到自动装包解包的过程,即它实际上做的是:
Object obj=new Integer(1);
约束2:有关运行时的类型检查
这样做是行不通的,而只能检查属于哪个泛型类:
这也是因为JVM的擦除导致的,参数T被替换成了Object。
又如:
package day37;class MyClass<T>{}class Person{}public class Test { public static void main(String[] args) { MyClass<String> c1=new MyClass<String>(); MyClass<Person> c2=new MyClass<Person>(); System.out.println(c1.getClass()); System.out.println(c2.getClass()); }}
运行结果:
class day37.MyClass
class day37.MyClass
约束3:有关异常处理
①不能抛掷或捕获泛型类的对象,因它不能继承Exception类来实现自己的异常类。
②不能用catch捕获抽象类型变量的对象。
约束4:不能声明一个参数化类型的数组
约束5:泛型类型的抽象参数不能被实例化
约束6:不能在静态属性或方法中使用泛型类型
约束7:擦除后的冲突
首先任何类必继承Object类,所以必有Object类的方法:
public boolean equals(Object obj){//...}
前面写的那个equals方法和这个方法并不是覆盖关系(因为方法的参数不同),而在JVM中做了擦除后,T变成了Object,两个方法就产生了冲突。
阅读全文
0 0
- 【Java学习笔记】37:泛型使用时要注意的约束
- java泛型编程学习 笔记二:使用泛型的约束和局限性
- java泛型使用时的约束与局限性
- JAVA学习笔记-------泛型,约束
- java学习笔记--封装的注意点
- java学习笔记---Java可变参数方法重载时要注意的几个问题
- C#泛型学习笔记之一(约束)
- Oracle 11g学习笔记--约束(constraint )的使用
- java学习笔记---浅谈java多态的注意要点
- 学习java的!注意
- Python 学习笔记【使用元组的注意点】
- [javase学习笔记]-8.3 static关键字使用的注意细节
- Java学习笔记之需要注意的基础知识点
- MYSQL的学习笔记-----MYSQL的约束
- Python学习总结笔记(5)--进程/线程Event机制使用时要注意的一个问题
- SQL学习笔记:表的约束
- oracle 中 MERGE INTO 使用时注意唯一约束冲突
- JAVA反射突破泛型的约束
- Windows下Anaconda2(Python2)和Anaconda3(Python3)的共存 .
- Oracle中查询、禁用、启用、删除表外键
- struts2 对Servlet API的操作
- HTML form表单新增元素
- Linux中常用操作命令
- 【Java学习笔记】37:泛型使用时要注意的约束
- 第五章 第四节:日期时间函数
- 我的博客旅程开始啦
- java的break continue return
- Java线程池学习(1)
- Use pandas to read data from files
- ItelliJ IDEA 打包机 jar,out 文件夹下没有jar包的
- 最常见的 20 个 jQuery 面试问题及答案
- Java运算符优先级