文章目录
- 一、什么是泛型
- 二、引出泛型
- 1、语法
- 三、泛型类的使用
- 1、语法
- 2、示例
- 3、类型推导(Type Inference)
- 四、裸类型(Raw Type)
- 五、泛型如何编译的
- 六、泛型的上界
- 1、语法
- 2、示例
- 七、泛型方法
- 八、通配符
- 九、包装类
一、什么是泛型
一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----- 来源《Java编程思想》对泛型的介绍。
泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。
二、引出泛型
1、语法
class 泛型类名称<类型形参列表> {// 这里可以使用类型参数
}class ClassName<T1, T2, ..., Tn> {}
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {// 这里可以使用类型参数
}class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {// 可以只使用部分类型参数
}
三、泛型类的使用
1、语法
泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象
2、示例
MyArray<Integer> list = new MyArray<Integer>();
注意:泛型只能接受类,所有的基本数据类型必须使用包装类!
3、类型推导(Type Inference)
当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写
MyArray<Integer> list = new MyArray<>(); // 可以推导出实例化需要的类型实参为 String
四、裸类型(Raw Type)
五、泛型如何编译的
六、泛型的上界
在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。
1、语法
class 泛型类名称<类型形参 extends 类型边界> {...
}
2、示例
public class MyArray<E extends Number> {...
}
七、泛型方法
定义语法
方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }
示例
public class Util {//静态的泛型方法 需要在static后用<>声明泛型类型参数public static <E> void swap(E[] array, int i, int j) {E t = array[i];array[i] = array[j];array[j] = t;}
}