自定义泛型
/* 需求: 定义一个方法可以接收任意类型的参数,而且返回值类型必须 要与实参的类型一致。 自定义泛型: 自定义泛型就是一个数据类型的占位符或者是一个数据类型的变量。 方法上自定义泛型: 修饰符 <声明自定义的泛型>返回值类型 函数名(使用自定义泛型 ...){ } 在泛型中不能使用基本数据类型,如果需要使用基本数据类型,那么就使用基本数据类型对应的包装类型。 byte----> Byte short---> Short int----> Integer long----> Long double ----> Double float -----> Float boolean-----Boolean char-------》 Character 方法泛型注意的事项: 1. 在方法上自定义泛型,这个自定义泛型的具体数据类型是在调用该 方法的时候传入实参时确定具体的数据类型的。 2. 自定义泛型只要符合标识符 的命名规则即可, 但是自定义泛型我们一般都习惯使用一个大写字母表示。 T Type E Element */ public class Demo2 { public static void main(String[] args) { String str = getData("abc"); Integer i = getData(123); } public static <abc>abc getData(abc o){ return o; } }
import java.util.ArrayList; /* 需求: 编写一个数组 的工具类 泛型类: 泛型类的定义格式: 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(); } public static <T>void print(T[] t){ } } public class Demo3 { public static void main(String[] args) { Integer[] arr = {10,12,14,19}; MyArrays<Integer> tool = new MyArrays<Integer>(); tool.reverse(arr); System.out.println("数组的元素:"+tool.toString(arr)); MyArrays<String> tool2 = new MyArrays<String>(); String[] arr2 = {"aaa","bbb","ccc"}; tool2.reverse(arr2); ArrayList<String> list = new ArrayList<String>(); } }