一、泛型的定义
所谓的泛型,就是在定义类或者方法时,没有明确参数的类型,而是在使用时,明确类型。不需要进行类型强转,编译阶段,就会在语法阶段检查类型是否匹配的机制,类型的编译阶段守门员,不会让类型不匹配的问题进入到运行阶段!
1、语法:
class 类名称< 类型参数> { // class Point<P> {
类型参数 成员变量名称; //
}
2、根据泛型类,来产生泛型对象!
Point<Integer> P = new Point<>();
3、泛型方法
- 泛型不仅可以定义类,也可以单独定义方法。
// 语法: 权限修饰符 <类型参数> 方法返回值类型 方法名称(类型参数 形参名称) { }
public <T> void fun(T t) { //fun就是泛型方法,t是形参,类型也是不确定的。
System.out.println("泛型方法fun");
System.out.println(t); // 泛型方法以自己的类型参数为准,为了区分和泛型类的类型参数,
// 一般若泛型类中存在泛型方法,两个使用不同的类型参数。
}
二、泛型的注意点:
(这三个问题的本质就在于泛型只存在于编译阶段,运行阶段没有泛型----类型擦除)
- 泛型只能用在成员域,不能用在静态域-----static修饰的内容不能使用泛型!
- 产生泛型对象时,具体的类型不能使用基本数据类型,要用基本类型的话统一使用包装类!!
- 不能直接创建和实例化泛型数组,要使用泛型数组,统一使用Object数组!