• 泛型


    一,泛型

    泛型能解决的问题------代码复用,比如

    //不适用泛型,两个类虽然代码结构即功能都相同,但是由于类型不一样,不能复用代码
    class classA(){
       private String field;
       public void fun(String a){}; 
        
    }
    
    class classB(){
       private int field;
       public void fun(int i){}; 
        
    }
    
    //使用泛型,引入类型变量T,允许该类匹配多种类型
    class classC<T>(){
       private T field;
       public void fun(T t){}; 
        
    }
    

      其中,类型变量可以为T,K,V,其他字母也行,无所谓,约定俗成而已,E常用于集合框架里的元素

    1,泛型类(泛型接口类似)

    泛型类可以有一个或多个类型变量,总而言之,泛型类可以理解为普通类的工厂

    public class  classA<T>{}

    public class  classB<K,V>{}

    2,泛型方法

    类型变量放在修饰符(static等)后,返回类型前,可以定义再普通类或泛型类里

    public class  classA<T>{
         private  T  field;   
         //返回值为String
         public  static <T>  String  fun(T t){}
         //返回值为泛型
          public  static <T>  T  fun2T t){}
               
    }    
    

     限定泛型边界

     限定泛型边界,则只能限定在Number类型,新建String类型会报错  

    public class Test01<T extends Number > {
        private T field;
    
        public T getField() {
            return field;
        }
    
        public void setField(T field) {
            this.field = field;
        }
    
        public static void main(String[] args) {
            Test01<Integer> test01=new Test01<>();
            test01.setField(10);
            System.out.println(test01.getField());//10
    
            //报错:类型参数没有继承Number
    //        Test01<String> test02=new Test01<String>();
        }
    }
    

      

    二,通配符

    当泛型中的类型变量T(或其他)实例为具体类型时,即为泛型赋值了,主要用在变量,即泛型赋值不确定,多用于方法传参的变量

    public class Test02<T> {
        
        
        public void fun(Test02<?> test02){
            
        }
    
        
    

      

     

  • 相关阅读:
    Vue.js 父子组件间传递值
    Vue.js 单选绑定
    Vue.js 的v-for, v-html v-bind, v-show 实例
    Vue.js 表单input绑定
    Bootstrap tab
    Think PHP-- 笔记2
    MySql 修改登陆规则
    Think PHP--有趣的框架
    PHPStorm的xdebug配置
    伪类选择器
  • 原文地址:https://www.cnblogs.com/guochengfirst/p/9384021.html
Copyright © 2020-2023  润新知