泛型的继承和通配符

泛型的继承和通配符说明 GenericExtends.java
file

import java.util.ArrayList;
import java.util.List;

/**
 * @author 安然的尾巴
 * @version 1.0
 */
public class Test {
    public static void main(String[] args){
        //泛型没有继承性
        //List<Object> list = new ArrayList<String>();
        
        List<Object> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<AA> list3 = new ArrayList<>();
        List<BB> list4 = new ArrayList<>();
        List<CC> list5 = new ArrayList<>();
    }
    // ? extends AA 表示 支持 AA 或者 AA 子类
    //规定了泛型的上限
    public static void print1(List<? extends AA> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }
    //说明: List<?> 表示 任意的泛型类型都可以接受
    public static void print2(List<?> c) {
        for (Object object : c) { // 通配符,取出时,就是 Object
            System.out.println(object);
        }
    }
    // ? super 子类类名 AA:支持 AA 类以及 AA 类的父类,不限于直接父类 比如Object顶级父类也支持
    //规定了泛型的下限
    public static void print3(List<? super AA> c) {
        for (Object object : c) {
            System.out.println(object);
        }
    }
}

class AA{}
class BB extends AA{}
class CC extends BB{}
posted @ 2023-02-23 09:13  安然的尾巴  阅读(30)  评论(0)    收藏  举报