zoukankan      html  css  js  c++  java
  • 关于泛型的学习

    泛型:定义:可以在编译时期进行类型检查,避免频繁类型转换,造成运行时错误。

    例:

        @Test
        public void testDemo1() throws Exception {
            
            List list1 = new ArrayList();
            list1.add("Sichuan");
            list1.add(1);
            //不能在编译时,发现异常,但是在运行时会出现转换异常
    Integer.parseInt((String)list1.get(0));
        
    List<Integer> list = new ArrayList<Integer>();
            //使用泛型,编译时产生异常
            list.add("四川");
    }

    泛型擦除:泛型只在编译时有效,编译后的字节码中无泛型。

    注意:泛型类型必须为引用类型,想int,double型不能成为泛型类型。

    泛型方法/泛型类/泛型接口:

    作用:对公用的业务实现进行抽取,使程序更灵活。

    例:泛型方法

    public <K> void save(K k){
            
            //使用泛型方法,通过参数确定泛型类型K,在方法内部可以使用泛型K
            
        }

    泛型类

    public class AdminDao<T> {
        
        //使用泛型类,确定泛型类型
        
    }

    泛型接口

    public interface AdminDao<T> {
        
        //使用泛型接口,确定泛型类型
        
    }

    泛型关键字:? extends super

    ?:可以接受任何泛型类型,但是不能使用,所以一般在方法参数接受时使用。

    extends:限定泛型元素范围,元素类型只能是指定类的子类(上限)

    super:指定泛型元素范围,元素类型只能是指定类的父类(下限)(较少使用)

    例:extends

        private void save (List<? extends Number> list){
            
        }
        
        public void testDemo2() throws Exception {
            
            //需求:只需要为数字的数组
            List<Integer> list1 = new ArrayList<Integer>();
            List<Double> list2 = new ArrayList<Double>();
            List<Float> list3 = new ArrayList<Float>();
            List<String> list4 = new ArrayList<String>();
            
            save(list1);    
            save(list2);    
            save(list3);
            //当泛型元素类型为String时,编译出现异常,因为String并不是Number的子类
            save(list4);
            
        }

    super:

        public void save(List<? super String> list) {
        }
    
        @Test
        public void testGeneric() throws Exception {
            // 调用上面方法,必须传入String的父类,所以list3是有通过不了编译
            List<Object> list1 = new ArrayList<Object>();
            List<String> list2 = new ArrayList<String>();
            
            List<Integer> list3 = new ArrayList<Integer>();
            //save(list3);
        }
  • 相关阅读:
    简单的方法爬取b站dnf视频封面步骤解释
    ROS讲座 关于ROS2和Gazebo C++ in Open Source Robotics
    深圳3分钟完成港澳签注 24小时自助办证服务攻略
    如何建立数据平台?看上市公司的选择!
    从开发转型到技术总监的迷茫
    计算机控制技术课程解释与问题答疑
    深度剖析 | 基于大数据架构的BI应用
    Android系统开机启动流程及init进程浅析
    经验分享 | 如何搭建企业管理驾驶舱
    android 修改framework下资源文件后如何编译
  • 原文地址:https://www.cnblogs.com/a294098789/p/5241879.html
Copyright © 2011-2022 走看看