徐州免费网站制作,wordpress 后台添加菜单,手机网站 微信平台,软件工程师行业现状及发展趋势本篇博客将详细讲解Java中的泛型。 文章目录 泛型的定义语法示例 泛型类语法示例类型边界语法示例 类型擦除通配符语法示例上界语法示例 下界语法示例 裸类型泛型方法语法示例 泛型的限制结尾 泛型的定义
语法
class 泛型类名称类型形参列表 {//这里可以使用类型参数…本篇博客将详细讲解Java中的泛型。 文章目录 泛型的定义语法示例 泛型类语法示例类型边界语法示例 类型擦除通配符语法示例上界语法示例 下界语法示例 裸类型泛型方法语法示例 泛型的限制结尾 泛型的定义
语法
class 泛型类名称类型形参列表 {//这里可以使用类型参数
}class 泛型类名称类型形参列表 extends 继承类 {//这里可以使用类型参数
}类型形参一般使用一个大写字面表示常用名称有
E表示ElementK表示KeyV表示ValueN表示NumberT表示TypeSUV表示第二、第三、第四个类型
示例
class MyArrayT {public T[] objects (T[]) new Object[10];public void set(int pos, T val) {objects[pos] val;}public T get(int pos) {return objects[pos];}
}泛型类
语法
泛型类类型实参 变量名; //定义一个泛型类引用
new 泛型类类型实参 (构造方法实参); //实例化一个泛型类对象示例
当编译器可以根据上下文推导出类型实参时可以省略类型实参的填写
MyArrayString list new MyArray();类型边界
在定义泛型类时有时需要对传入的类型变量做一定的约束可以通过类型边界来约束。
语法
class 泛型类名称类型形参 extends 类型边界 {...
}示例
public class MyArrayE extends Number {...
}类型擦除
泛型是作用在编译期间的一种机制实际上运行期间是没有这么多类的因此存在类型擦除。例如
class MyArrayT {// T会被擦除为Object
}class MyArrayE extends ComparableE {// E会被擦除为Comparable
}类型擦除主要看其类型边界而定。 编译器在类型擦除阶段在做什么 将类型变量用擦除后的类型替换即 Object 或者 Comparable 加入必要的类型转换语句 加入必要的bridge method保证多态的正确性 通配符
语法
?用于泛型的使用即为通配符。
示例
public class MyArrayT {...
}public static void printAll(MyArray? list) {//可以传入任意类型的MyArray
}上界
语法
? extends 上界示例
public static void printAll(MyArray? extends Number list) {//可以传入类型实参是Number子类的任意类型的MyArray
}下界
语法
? super 下界示例
public static void printAll(MyArray? super Integer list) {//可以传入类型实参是Integer父类的任意类型的MyArray
}注意
MyArrayListObject 不是MyArrayListNumber的父类型
MyArrayListNumber也不是MyArrayListInteger的父类型
需要使用通配符来确定父子类型
MyArrayList?是MyArrayList? extends Number的父类型 MyArrayList? extends Number是MyArrayListInteger的父类型
裸类型
裸类型是一个泛型类但没有带着类型实参例如
MyArray list new MyArray();泛型方法
语法
方法限定符 类型形参列表 返回值类型 方法名称(形参列表) {...
}示例
class AT extends ComparableT {public T findMax(T[] array) {T max array[0];for (int i 0; i array.length; i) {if (max.compareTo(array[i]) 0) {max array[i];}}return max;}//如果是静态方法public staticT extends ComparableT T findMax(T[] array) {T max array[0];for (int i 0; i array.length; i) {if (max.compareTo(array[i]) 0) {max array[i];}}return max;}
}泛型的限制 泛型类型参数不支持基本数据类型 无法实例化泛型类型的对象 无法使用泛型类型声明静态的属性 无法使用 instanceof 判断带类型参数的泛型类型 无法创建泛型类数组 无法 create、catch、throw 一个泛型类异常异常不支持泛型 泛型类型不是形参一部分无法重载
结尾
本篇博客到此结束。 上一篇博客Java学习苦旅二十——七大排序JAVA代码 下一篇博客Java学习苦旅二十二——MapSet