---
# System prepended metadata

title: 方法之六 - 續、泛型方法
tags: [java, article index, tutorial article, teaching]

---

```java
public class ExampleMethod6 {

    public static void main(String[] args) {

        /*
         * 以下兩個承載著不同型別的 list 都呼叫了同一個方法進行反轉。
         */ 
        List<String> list1 = new ArrayList<String>();
        list1.add("str1");
        list1.add("str2");
        list1.add("str3");
        list1 = reverseList(list1); //[str3, str2, str1]
        reverseList2(list1); //[str1, str2, str3]
        
        List<Integer> list2 = new ArrayList<Integer>();
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2 = reverseList(list2); //[3, 2, 1]
        reverseList2(list2); //[1, 2, 3]
        /*
         * 同樣的，以下兩個不同形態的陣列呼叫相同的方法。
         * 也是可以正常的印出內容。
         */ 
        String[] strArr = new String[] { "1", "2", "3" };
        printArray(strArr);
        
        Integer[] intArr = new Integer[] { 1, 2, 3 };
        printArray(intArr);
    }

    //直接對 list 操作，所以不需要 return 物件
    public static <T> void reverseList2(List<T> list) {
        int size = list.size();
        for (int i = 0; i < size / 2; i++) {
            int j = size - 1 - i;
            T temp = list.get(i);
            list.set(i, list.get(j));
            list.set(j, temp);
        }
    }
    
    //創造一個新的 list 去承接結果，所以回傳後也需要有變數去接
    public static <T> List<T> reverseList(List<T> list) {
        List<T> reversed = new ArrayList<>();
        for (int i = list.size() - 1; i >= 0; i--) {
            reversed.add(list.get(i));
        }
        return reversed;
    }

    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.println(element);
        }
    }

}
```