[Java]泛型中值得注意的点

xiaoxiao2021-02-28  93

泛型(generic)是指参数化类型的能力。可定义带泛型类型的类/方法/接口,随后编译器会用具体的类型替换它。使用泛型的主要优点: 能在编译时而不是运行时检测出错误。泛型类型必须是引用类型。创建对象时:例new GenericStack<String>() 但构造方法实际定义是:例new GenericStack()可将泛型指定为另一种类型的子类型,这样的泛型类型称为受限的。定义一个类为泛型类型,需将泛型类型放在类名后面; 例:GenericStack<E> 定义一个方法为泛型类型,要将泛型类型放在方法返回类型之前; 例:<E> void max(E o1,E o2)不使用类型参数的泛型类称为原始类型; 例:GenericStack stack=new GenericStack();通配泛型类型的三种形式: ? 非受限通配 <=>? extends Object ? extends T 受限通配 T或T的一个未知子类型 ? super T 下限通配 T或T的一个未知父类型举例说明:尽管Integer是Object的一个子类型,但GenericStack<Integer>并不是GenericStack<Object>的子类型。泛型是使用 类型擦除(type erasure)的方法实现的。泛型存在于编译时,泛型信息在运行时是不可用的。不管实际的具体类型是什么,泛型类是被它的所有实例所共享的。由于泛型类型在运行时被消除,因此在使用时有限制: 1.不能使用泛型类型参数来创建实例; 例:new E() 2.不能使用泛型类型参数来创建数组; 例:E[ ] elements=new E[capacity]; 规避方法:E[ ] elements=(E[ ])new Object[capacity];—–会有警告 3.不能在静态环境中使用类的泛型类型参数; 4.异常类中不能使用泛型类型参数。
转载请注明原文地址: https://www.6miu.com/read-77559.html

最新回复(0)