• Java泛型


    为什么需要泛型

    在学泛型的时候更加关注这个问题,下面是对java核心的总结

    • 多态获取一个值时需要强转
    • 多态get时会有强转的安全性问题,编译错误要优于运行时强转异常
    • 泛型使代码具有更好的可读性

    泛型的使用

    package 泛型;
    
    import org.junit.jupiter.api.Test;
    
    import java.util.LinkedList;
    
    /**
     * 2022-06-22 19:38
     *
     * 这个例子的继承结构  Animal-> Person-> Student
     *
     * 通配符
     * ?(正无穷,负无穷)
     * ?extend a   (负无穷,a]
     * ?super a    [a,正无穷}
     * 这里的从小到大指 继承关系 从低到高
     *
     * 个人感觉泛型相对于多态 更加清晰、 更加快(不需要强转)、是编译时、
     */
    public class GenericTest {
    //    原则  赋值一定是被赋值的子类或本身。(多态)
        @Test
        void Test1(){
            LinkedList<? super Person> list_s = new LinkedList<>();
            LinkedList<? extends Person> list_e = new LinkedList<>();
    //        写 :只能写入通配符的子类或者最大本身(最父)或null
            list_s.add(new Student());
    //        list_e.add(new Person());  //报错
    //        读:只能读入通配符的父类或者最小本身(最子)或Object
            Animal item1 = list_e.getFirst();
    //        Animal item2 = list_s.getFirst();  //报错
    //        在声明时 ,需要前后一致
    //        LinkedList l = new LinkedList(); //报错
        }
    }
    // 泛型类、 泛型接口、 泛型方法的使用
    class Person<T,K> extends Animal implements leg <K> {
        T t;
        Person(){}
    //    泛型方法一定新声明了一个方法
        <E> T show (E e){
            System.out.println(e);
            return t;
        }
        public void run(K k){
            System.out.println(k);
        }
    }
    interface leg <K> {
         void run(K k);
    }
    class Student <T,K> extends Person<T,K>{}
    class Animal{}
    //调用,方法名前声明泛型
     new c(). <Integer>a(00);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    机器学习实战练手项目
    图数据挖掘:基于概率的流行病模型
    堪称经典,一个非常适合初学者的机器学习实战案例
    Linux内核完全注释(基于Linux0.11)_笔记_Linux0.11执行流程
    【力扣】994.腐烂的橘子
    十年前对敏捷开发的体会
    update select
    如何给运行中的容器添加--restart=always
    KNN学习代码理解尝试
    ios自动化-Xcode、WebDriverAgent环境部署
  • 原文地址:https://blog.csdn.net/qq_51682771/article/details/125420196