package com.collection.genericity;
/*
* 泛型类;
*
* 需求:编写一个数组的工具类;
*
* 泛型类的定义格式:
* class 类名 <声明自定义泛型>{
* }
*
* 泛型类要注意的事项:
* 1、在类上自定义泛型的具体数据类型是在使用该类创建对象的时候确定的;
* 2、如果已经在一个类上声明了自定义泛型,但是使用该类创建对象的时候没有指定泛型的具体数据类型,那么默认为Object类型;
* 3、在类上自定义的泛型不能作用于静态方法上;如果静态的方法需要使用泛型,需要在方法上自己声明使用;
*/
class MyArrays<T>{
// 元素翻转
public void reverse(T[] arr){
for (int startIndex=0,endIndex=arr.length-1; startIndex<endIndex; startIndex++,endIndex--){
T temp = arr[startIndex];
arr[startIndex] = arr[endIndex];
arr[endIndex] = temp;
}
}
// 获取数组中所有的元素
public String toString(T[] arr){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++){
if (i == 0){
sb.append("[" + arr[i] + ",");
}else if (i == arr.length-1){
sb.append(arr[i] + "]");
}else{
sb.append(arr[i] + ",");
}
}
return sb.toString();
}
// 注意事项3:在类上自定义的泛型不能作用于静态方法上;如果静态的方法需要使用泛型,需要在方法上自己声明使用;
public static <T> void print(T[] t){
}
}
public class Demo3 {
public static void main(String[] args) {
// 声明一个数组
Integer[] arr = {22, 33, 16, 28};
// 注意事项1:创建工具类对象;确定泛型的具体数据类型为Integer;
MyArrays<Integer> arrTool = new MyArrays<Integer>();
// 调用工具类的方法
arrTool.reverse(arr);
System.out.println("数组的元素:" + arrTool.toString(arr));
MyArrays<String> arrTool2 = new MyArrays<String>();
String[] strArr = {"aaa", "bbb", "ccc"};
arrTool2.reverse(strArr);
System.out.println("数组的元素:" + arrTool2.toString(strArr));
// 注意事项2:类上声明了自定义泛型,但是创建对象的时候没有指明具体的数据类型,那么默认为Object类型;
MyArrays arrTool3 = new MyArrays();
arrTool3.reverse(new Object[]{});
}
}