泛型的继承和泛型的通配符


泛型的继承和泛型的通配符


package com.atguigu.java2;

import org.junit.Test;

import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * 1. 泛型在继承方面的体现
 *
 *
 * 2. 通配符的使用
 *
 * @author liangqichen
 * @create 2021-10-09 20:33
 */
public class GenericTest {

    /*
    1. 泛型在继承方面的体现
        虽然:类A是类B的父类, 但是:G<A>和G<B> 不具备子父类关系,二者是并列关系。

        补充:类A是类B的父类,A<G> 是 B<G> 的父类

     */
    @Test
    public void test1(){
        Object obj = null;
        String str = null;

        obj = str;

        Object[] arr1 = null;
        String[] arr2 = null;
        arr1 = arr2;

        List<Object> list1 = null;
        List<String> list2 = null;

                // 以下,编译不通过
        // 此时的list1和list2的类型不具有子父类的关系
//        list1 = list2;

//        Date date = new Date();
//        str = date;

        /*
        反证法:
        假设list2可以赋值给list1;
            list1.add(123);导致混入非String的数据,出错。
         */

        show(list1);
        show1(list2);

    }

    public void show(List<Object> list){

    }

    public void show1(List<String> list){

    }

    @Test
    public void test2(){
        AbstractList<String> list1 = null;
        AbstractList<String> list2 = null;
        ArrayList<String> list3 = null;

        list1 = list3;
        list2 = list3;

        List<String> list4 = new ArrayList<>();


    }

    /*
    2. 通配符的使用
        通配符?

        类A是类B的父类  G<A> G<B>是没有关系的 ,二者共同的父类是G<?>
     */
    @Test
    public void test3(){
        List<Object> list1 = null;
        List<String> list2 = null;

        List<?> list = null;

        list = list1;
        list = list2;

//        print(list1);
//        print(list2);

        //

        List<String> list3 = new ArrayList<>();
        list3.add("AA");
        list3.add("BB");
        list3.add("CC");
        list = list3;
        // 添加:对于List<?> 就不能向其内部添加数据。
        //****除了添加null之外****
//        list.add("DD");
//        list.add(?);
        list.add(null);

        // 获取:读取 允许读取数据,读取的数据类型为Object
        Object o = list.get(0);
        System.out.println(o);
    }

    public void print(List<?> list){
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }

    /*
    3. 有限制条件的通配符的使用

    
     */
}
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值