公司网站架构,网络推广的方法和技巧,集约化网站数据库建设规范,wordpress 批量修改文章分类文章目录 一般的类和方法#xff0c;只能使用具体的类型: 要么是基本类型#xff0c;要么是自定义的类。这种限制对代码的束缚就会很大。所以我们引入了泛型。泛型#xff0c;泛顾名思义就是广泛的意思。就是适用于许多许多类型。从代码上讲#xff0c;就是对类型实现了参数… 文章目录 一般的类和方法只能使用具体的类型: 要么是基本类型要么是自定义的类。这种限制对代码的束缚就会很大。所以我们引入了泛型。泛型泛顾名思义就是广泛的意思。就是适用于许多许多类型。从代码上讲就是对类型实现了参数化。 我们来看下面的代码
public class Demo03 {public static void main(String[] args) {MyArray myArray new MyArray();myArray.setValue(0,10);myArray.setValue(1,hello);String pos myArray.getPos(0); //errorSystem.out.println(pos);}
}class MyArray {Object[] arr new Object[10];//获取下标为pos的元素public Object getPos(int pos) {return this.arr[pos];}//在pos位置放入val元素public void setValue(int pos,Object val) {this.arr[pos] val;}
}通过上面的代码我们发现虽然在这种情况下当前数组任何数据都可以存放但是更多情况下我们还是希望他只能够持有一种数据类型。而不是同时持有这么多类型。
泛型语法
class 泛型类名称类型形参列表 {
// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn {
}
class 泛型类名称类型形参列表 extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn extends ParentClassT1 {
// 可以只使用部分类型参数
}我们可以把上面的代码用泛型进行改写
public class Demo03 {public static void main(String[] args) {MyArrayInteger myArray new MyArray();myArray.setValue(0,10);myArray.setValue(1,11);}
}class MyArrayT {T[] arr (T[])new Object[10];public T getPos(int pos) {return this.arr[pos];}public void setValue(int pos,T val) {this.arr[pos] val;}
}代码解释 类名后的 尖括号T 代表占位符表示当前类是一个泛型类。 不能new泛型类型的数组比如T[] t new T[5]; 类型后加入 Integer 指定当前类型 不需要进行强制类型转换 编译器会在存放元素的时候帮助我们进行类型检查。
泛型类的使用
泛型类类型实参 变量名; // 定义一个泛型类引用
new 泛型类类型实参(构造方法实参); // 实例化一个泛型类对象比如
MyArrayInteger list new MyArrayInteger();
//等价于 MyArrayInteger list new MyArray();注意泛型只能接受引用类型所有的基本数据类型必须使用包装类。 泛型的上界 在定义泛型类时有时需要对传入的类型变量做一定的约束可以通过类型边界来约束。
class 泛型类名称类型形参 extends 类型边界 {
//
}比如
public class MyArrayE extends Number {
//
}这样它就只接受 Number 的子类型作为 E 的类型实参。
MyArrayInteger str1; // 正常因为 Integer 是 Number 的子类型
MyArrayString str2; // 编译错误因为 String 不是 Number 的子类型我们来看这道练习写一个泛型实现一个方法方法是求指定类型数组的最大值
public class Demo02 {public static void main(String[] args) {FindMaxValueInteger tFindMaxValue new FindMaxValue();Integer[] array {1,4,6,2,10};Integer max tFindMaxValue.findMax(array);System.out.println(max);}
}//泛型类
//T extends ComparableT T一定是实现了Comparable接口
class FindMaxValue T extends ComparableT {public T findMax(T[] arr) {T max arr[0];for (int i 1; i arr.length; i) {if (max.compareTo(arr[i])0){max arr[i];}}return max;}
}上面的代码我们也可以使用泛型方法来写
public class Demo02 {public static void main(String[] args) {Integer[] array1 {1,4,6,2,10};Integer max1 FindMaxValue1.findMax(array1);System.out.println(max1);}
}class FindMaxValue1 {//泛型方法public static T extends ComparableT T findMax(T[] arr) {T max arr[0];for (int i 1; i arr.length; i) {if (max.compareTo(arr[i])0){max arr[i];}}return max;}
}