java再学习之泛型

来源:互联网 发布:淘宝买家两钻有什么用 编辑:程序博客网 时间:2024/06/05 07:01

什么是泛型?

泛型(generic)是指参数化类型的能力。【泛型类型必须是引用类型,不能使用基本类型来替换泛型类型。】


泛型的优点

使用泛型的主要优点是能够在编译时而不是在运行时检测出错误。泛型类或方法允许用户指定可以和这些类或方法一起工作的对象类型。如果试图使用一个不相容的对象,编译器就会检测出这个错误。从而使程序更加可靠。


泛型类和接口:

定义一个类为泛型类型,需要将泛型类型放在类名之后,例如:GenericStack<E>。
定义一个方法为泛型类型,需要将泛型类型放在方法返回类型之前,例如:<E> void max(E o1, E o2){}


为什么泛型类型可以提高可靠性和可读性?

泛型能够在编译时而不是在运行时检测出错误,如果试图使用一个不相容的对象,编译器就会检测出这个错误,从而使程序更加可靠。


如何使用泛型方法和受限泛型类型?

为了调用泛型方法,需要将实际类型放在尖括号内作为方法名的前缀。将泛型指定为另一种类型的子类型,这样的泛型类型称为受限的(bounded)。


什么是原始类型?

原始类型(raw type):不使用类型参数的泛型类称为原始类型。


为什么有必要有通配的泛型类型?

泛型方法的相互间调用,如果泛型类型不相同,就必须有通配的泛型类型。


什么是泛型消除并并列出一些由类型消除引起的泛型上的限制和局限性?

泛型消除:编译器使用泛型类型信息来编译代码,但是随后会消除它,因此,泛型信息在运行时是不可用的。泛型存在于编译时,一旦编译器确认泛型类型是安全使用的,就会将它转换为原始类型。
泛型类型的一些限制:
1、不能使用new E(),即不能使用泛型类型参数创建实例。
2、不能使用new E[],即不能使用泛型类型参数创建数组。
3、在静态环境下不允许类的参数是泛型类型。由于泛型类的所有实例都有相同的运行时类,所以泛型类的静态变量和方法是被它的所有实例所共享的,因此,在静态方法、数据域或者初始化语句中,为了类而引用泛型参数是非法的。
4、异常类不能是泛型的。即,泛型类不能扩展java.lang.Throwable。