- 泛型(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.异常类中不能使用泛型类型参数。
[Java]泛型中值得注意的点
最新推荐文章于 2021-02-27 19:39:58 发布