• java泛型入门篇


    转自:

      java泛型入门篇

    下文笔者讲述泛型的入门篇,如下所示:

    泛型简介

    泛型
      从JDK5中就可以使用此语法糖
      泛型的使用可在编译阶段约束操作的数据类型,并进行检查
    
    泛型的语法:
       泛型的语法格式:<数据类型>
    
    泛型注意事项:
       1.泛型只能支持引用数据类型
       2.集合的全部接口和实现类都是支持泛型使用
    

    泛型的优点

     1.可提前约定数据类型
     2.并且在编译阶段就确定数据类型
        可避免强制类型转换的问题
    

    例:泛型类的应用

    public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("柳絮");
            list.add("刘达龙");
            list.add("张靓颖");
            for (String s : list) {
                System.out.println(s);
            }
        }
    

    自定义泛型类

    我们将定义类同时指定一个泛型变量,这种类的定义模式
    称之为“泛型类”
    
    泛型类的格式
       修饰符 class 类名<泛型变量> {        }
    
    public class MyClassTest<E>{    } 
    

    例:自定义泛型类的示例

    现创建一个泛型类,实现基本的增加、删除操作,以此来具体了解其用法:
    
    //泛型类MyArrayLIst
    public class MyClassTest<E> {
        public void add(E e){
    	   代码省略
        }
        public void remove(E e){
    	 代码省略
        }
    }
    //main
    public static void main(String[] args) {
            MyClassTest<String> list = new MyClassTest<>();
            //通过对泛型的设定,实现对数据专一处理
            list.add("刘畅");
            list.add("艾米莉");
            list.remove("叶问");
        }
    

    泛型类的原理

    代码编译时,将泛型变量替换为真实的数据类型即可
    

    自定义泛型方法

     定义方法的同时指定泛型变量,我们将这种方法称之为“泛型方法”
     
     泛型方法的格式:
        修饰符<泛型变量> 返回值类型 方法名(形参列表){        }
    public <E> void view(E e){    }
    
     泛型方法的功能:
        方法中可以使用泛型接收一切实际类型的参数,
    	方法更具备通用性。
    
    泛型方法注意事项:
         泛型方法需要区别于泛型类中所定义的方法
          虽然它们也在使用泛型
         但是该泛型不是其定义的,而是泛型类定义
    

    例:泛型方法的定义

    public static void main(String[] args) {
            String [] name = {"柳荫","毛成","李明浩"};
            view(name);
            Integer [] age = {18,16,20};
            view(age);
        }
    	//泛型方法的定义
        public static  <T> void view(T[] arr){
            StringBuilder list = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                list.append(arr[i]).append("\t");
            }
            System.out.println(list);
        }
    

    自定义泛型接口

     
    使用泛型定义的接口称之为"泛型接口"
    
    泛型接口的格式:
       public interface User<E>{        }
    
    public interface User <E>{    }
    泛型接口的功能:
       泛型接口可以让实现类选择当前功能需要操作的数据类型
    

    例: 定义一个User接口
    实现对老师Teacher类、学生Student两个类的操作

    //User接口
    public interface User <E>{
        void run(E e);
        void ageAdd(E e);
    }
    //Student类
    public class Teacher {
     
    }
    //实现类Fantype
    public class Fantype implements User<Teacher> {
     
        @Override
        public void run(Teacher teacher) {
     
        }
     
        @Override
        public void ageAdd(Teacher teacher) {
     
        }
    }
    
    从以上代码可以看出
    User后定义的是泛型类型
     并且用于到接口中的实际操作
    

    通配符和上下限

    通配符

    ?可以在“使用泛型”的时候代表一切类型
    E T K V是在定义泛型的时候常用的字符,当然可以使用任意字符 
    

    上下限

    上下限:
        指我们传入泛型类型的最大子类和最小类型
    如:
       上限:<? extends 父类> :传入类型必须是该父类或者是父类的子类
       下限:<? super 子类>  :传入类型必须是该子类或者是子类的父类 
    

    例:

    public static void testFun(ArrayList<? extends User> User){
    //通过上下限便可以将这个问题解决掉
    //要求传入的类型必须是User的子类才可以
        }
  • 相关阅读:
    代码随想录算法训练营第二十八天丨 回溯算法part05
    pip安装skimage的方法
    Echarts 3D饼图开发
    Centos 7部署sysbench测试Opengauss/MogDB性能
    第30章_瑞萨MCU零基础入门系列教程之IRDA红外遥控实验
    武汉市科技重大专项“卡脖子”技术攻关项目榜单出台,2022年申报条件以及申报流程是什么
    【机器学习300问】102、什么是混淆矩阵?
    pytest(4)-测试用例执行顺序
    【Docker】常用命令总结
    实时检测网络钓鱼攻击的5种方法
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/125616403