• 10.【Java核心.泛型】常用的泛型书写语法及泛型所处的阶段


    泛型:

    ​ 本质:参数化类型

    泛型的擦除:

    ​ 泛型只在编译阶段有效,编译之后JVM会采取去泛型化的措施.

    ​ 泛型在运行阶段是没有效果

    泛型通配符

    1.无边界通配符

    通用的类型
    public class Demo02 {
        public static void main(String[] args) {
            List<String> list1 = new ArrayList<>();
            list1.add("nick");
            list1.add("tom");
            list1.add("coco");
            loop(list1);
        }
    
        public static void loop(List<?> list){
            for (int i = 0; i < list.size() ; i++) {
                System.out.println(list.get(i));
            }
        }
    }
    

    2.上边界通配符

    < ? extends Number > 代表从Number往下的子类或孙类对象都可以使用

    public class Demo03 {
        public static void main(String[] args) {
            List<String> list1 = new ArrayList<>();
            list1.add("nick");
            list1.add("tom");
            list1.add("coco");
            // loop(list1);
            List<Number> list2 = new ArrayList<>();
            list2.add(1);
            list2.add(2);
            list2.add(3);
        }
    
        /**
         *  ?  extends Number
         *  通用的类型必须是Number及其子类
         * @param list
         */
        public static void loop(List<? extends Number> list){
            for (int i = 0; i < list.size() ; i++) {
                System.out.println(list.get(i));
            }
        }
    }
    

    3.下边界通配符

    代表从Integer 到Object所有的对象都可以
    public class Demo04 {
        public static void main(String[] args) {
            List<String> list1 = new ArrayList<>();
            list1.add("nick");
            list1.add("tom");
            list1.add("coco");
             loop(list1);
            List<Number> list2 = new ArrayList<>();
            list2.add(1);
            list2.add(2);
            list2.add(3);
            loop(list2);
        }
    
        /**
         *  ?  super Number
         *  通用类型必须是Integer 到Object类型的对象
         * @param list
         */
        public static void loop(List<? super Number> list){
            for (int i = 0; i < list.size() ; i++) {
                System.out.println(list.get(i));
            }
        }
    }
    

    泛型的具体的使用

    规则

    1.必须先声明再使用
    
    2.泛型的声明是通过"<>"实现
    
    3.约定泛型可以使用单个大写字母来表示 K E T V 等
    

    泛型类

    public class PersonNew <T> {
    
        private T t;
    
        public T getT() {
            return t;
        }
    
        public void setT(T t) {
            this.t = t;
        }
    
        public PersonNew(T t) {
            this.t = t;
        }
    }
    

    增加我们代码的灵活度

    泛型方法

    public class Demo07 <K,V> {
    
        /**
         * 普通方法 可以使用 类中定义的泛型
         * @param k
         * @param v
         * @return
         */
        public K method1(K k,V v){
            return (K)null;
        }
    
        /**
         * 普通方法  使用方法中定义的泛型
         * @param t
         * @param v
         * @param <T>
         * @return
         */
        public <T> T method2(T t,V v){
            return (T)null;
        }
    
        /**
         * 在静态方法中我们没法使用 类中定义的泛型
         * @return
         */
        public static <K> K method3(){
            return null;
        }
    
    

    泛型接口

    public interface CalGeneric <T> {
    
        T add(T a,T b);
    
        T sub(T a,T b);
    
        T mul(T a,T b);
    
        T div(T a,T b);
    }
    
    public class CalIntegerGeneric implements  CalGeneric<Integer> {
        @Override
        public Integer add(Integer a, Integer b) {
            return null;
        }
    
        @Override
        public Integer sub(Integer a, Integer b) {
            return null;
        }
    
        @Override
        public Integer mul(Integer a, Integer b) {
            return null;
        }
    
        @Override
        public Integer div(Integer a, Integer b) {
            return null;
        }
    }
    
    
  • 相关阅读:
    Linux _条件变量
    Linux _pthread 线程的同步 浅见
    Linux pthread 线程 浅解
    Linux _守护进程 浅解
    Linux _孤儿进程和僵尸进程 浅见
    Linux 小技巧
    Linux _sem 信号量 V_P
    树莓派ZeroW上传数据文件到阿里云对象存储OSS(Python)
    树莓派ZeroW开机自动运行
    树莓派ZeroW串口通讯
  • 原文地址:https://www.cnblogs.com/Nick-Hu/p/14542092.html
Copyright © 2020-2023  润新知