public static void main(String[] args) throws Exception { String[] arr = new String[]{"1", "2", "3"}; changeAddr(arr, 0, 2); System.out.println(Arrays.toString(arr)); Person person = new Person(); //T 做爲對象傳入,返回一個T類型對象 String[] arr1 = new String[]{"hhh", "20"}; //這裏能夠看到,Person並不須要進行強轉,由於返回值類型在傳入T的時候在返回值以前的<T>進行了定義,將其定義爲了Person person = handleData(person, arr1); System.out.println(person.toString()); } /** * 簡單的demo,示例交換數組索引位置的值 * * @param arr 傳入的數組 * @param begin 交換索引 * @param end 交換索引 * @param <T> 定義的一個類型 * <T>表示聲明一個泛型類型T,在調用方法,傳入參數的時候再肯定T的類型,T能夠是全部類型,可是肯定了是傳入的類型, * 好比如下方法,傳入的爲 T[] ,就表明T是聲明這個參數的類型使用 * 其實T能夠使用任意的字符代替,可是通常使用 T 表示Type 類型的意思(聲明一個類型 ) * T一般放在方法的返回值聲明以前 * T不是一個類。可是由於在以前的<T>定義好了一個泛型T,則泛型類型T能夠做爲數據類型使用 * * <> 方法中傳入的T,其實就是聲明的<T> </> */ static <T> void changeAddr(T[] arr, Integer begin, Integer end) { T temp = arr[begin]; arr[begin] = arr[end]; arr[end] = temp; } /** * 示例使用泛型進行對象的傳入與處理 * @param t 泛型類型 * @param names 參數值 * @param <T> 定義的傳入與返回的持有對象的類型 * @return 傳入的類型 * @throws Exception */ static <T> T handleData(T t, String[] names) throws Exception { Class c = t.getClass(); Field[] fields = c.getDeclaredFields(); Method[] methods = c.getDeclaredMethods(); for (Field field : fields) { //暴力訪問 field.setAccessible(true); for (String s : names) { field.set(t, s); } } return t; }
注意:使用泛型以前必定要對泛型進行聲明,在返回值以前的<T>就是對泛型類型的聲明數組
語法:spa
public <泛型聲明> T methodName(args...);