学习JAVA的记录(一)—泛型
泛型
泛型的定义
泛型就是将数据类型参数化。
使用泛型的优势
在编译时而不是在运行时检测出错误。
(在运行过程中是没有泛型的)
注意点1:
泛型一定是引用类型,不是8种基本数据类型(int,short,double,float,boolean等)
注意点2:
区分泛型类和泛型方法
泛型类:GenericStack <E> stack = new GenericStack <E>()
(在类名之后)
泛型方法:public static <E> void print(E[] list){}
(在方法的返回类型前)
通配泛型
- 非受限通配
?
,等价于?extends Object
- 受限通配
? extends T //表示T或T的一个子类型
- 下限通配
? super T //表示T或T的一个父类型
泛型的限制
- 不能使用
new E()
。
E[] e = new E[10];
是错误的。
应该是E[] e = (E[])new object[10];
- 在静态上下文中不允许类的参数是泛型类型。
- 异常类不能是泛型。
泛型的消除
编译器使用泛型来编译代码,但编译后会消除掉泛型,因此运行时是没有泛型的。
为什么使用消除来实现JAVA泛型?
为了解决前后系统类型的兼容问题。