JAVA高级复习-泛型通配符的使用

/**
 * 通配符的使用
 * 通配符:?
 */
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);
    }

}
posted @ 2020-09-14 21:46  温森  阅读(157)  评论(0编辑  收藏  举报