1. 程式人生 > 實用技巧 >JAVA高階複習-泛型萬用字元的使用

JAVA高階複習-泛型萬用字元的使用

一、類A 是 類B的父類,G 和 G是沒有關係的,二者共同的父類是:G<?>

二、新增(寫入)對於List<?>不能向其內部新增資料,除了新增null;

三、獲取(讀取)對於List<?>允許讀取資料,讀取的資料型別為Object

/**
 * 萬用字元的使用
 * 萬用字元:?
 */
public class GenericTest7 {

    /**
     * 類A 是 類B的父類,G<A> 和 G<B>是沒有關係的,二者共同的父類是:G<?>
     */
    @Test
    public void test01() {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);

        List<String> list2 = new ArrayList<>();
        list2.add("hi");
        list2.add("hello");

        List<Object> list3 = new ArrayList<>();
        list3.add(1);
        list3.add("bye");
        showList(list);
        showList(list2);
        showList(list3);

        List<?> listFather = null;
        listFather = list;
        listFather = list2;
        listFather = list3;
    }

    private void showList(List<?> list) {
        for (int i = 0; i < list.size(); i++) {
            Object obj = list.get(i);
            System.out.println(obj);
        }
    }

    @Test
    public void test02() {
        List<String> list = new ArrayList<>();
        list.add("AA");
        list.add("BB");
        List<?> listFather = null;
        listFather = list;
        //報錯:add (capture<?>) in List cannot be applied to (java.lang.String)
        //結論:新增(寫入)對於List<?>不能向其內部新增資料,除了新增null;
        //listFather.add("DD");
        listFather.add(null);

        //結論:獲取(讀取)對於List<?>允許讀取資料,讀取的資料型別為Object
        Object obj = listFather.get(0);
        System.out.println(obj);
    }

}