JAVA 泛型方法


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>就是對泛型類型的聲明

語法:

public <泛型聲明> T methodName(args...);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM