• 泛型类和泛型方法


    泛型

    泛型使用场景

    • 泛型类
    • 泛型接口
    • 泛型方法

    示例

    泛型类Order.java

    /*
    * 假如这个Order类在使用时可能会临时增加不确定的类型的属性--可以考虑使用泛型类
    * */
    public class Order<T> {
        String orderName;
        int orderId;
    
        T orderT;
    
        /*
        * 什么叫泛型方法:
        *   泛型方法具有泛型结构,但是泛型方法的泛型参数和泛型类的泛型参数不一样
        *   换句话说:泛型方法所属的类并不一定是泛型类
        *   泛型方法可以被定义为静态方法!!
        * */
        public <E> List<E> copyFromListToArray(E[] array){
            ArrayList<E> list = new ArrayList<>();
    
            for (int i = 0; i < array.length; i++) {
                list.add(array[i]);
            }
            return list;
        }
    
    
    
        //以下所有方法都不是泛型方法
        public Order() {
    
        }
    
        public Order(String orderName, int orderId, T orderT) {
            this.orderName = orderName;
            this.orderId = orderId;
            this.orderT = orderT;
        }
    
        public String getOrderName() {
            return orderName;
        }
    
        public void setOrderName(String orderName) {
            this.orderName = orderName;
        }
    
        public int getOrderId() {
            return orderId;
        }
    
        public void setOrderId(int orderId) {
            this.orderId = orderId;
        }
    
        public T getOrderT() {
            return orderT;
        }
    
        public void setOrderT(T orderT) {
            this.orderT = orderT;
        }
    
        @Override
        public String toString() {
            return "Order{" +
                    "orderName='" + orderName + '\'' +
                    ", orderId=" + orderId +
                    ", orderT=" + orderT +
                    '}';
        }
    }
    
    • 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
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    注意:

    • Order order = new Order(); 泛型类实例化没有指定具体类型默认泛型为Object 类型(不建议使用),因此在泛型类实例化时应指定具体的类型Order order = new Order<>();

    • 类继承指定具体类型的泛型类,那么子类不再是泛型类

      public class SubOrder01 extends Order<Integer>{}
      
      • 1
    • 子类继承没指定具体类型的泛型类,那么子类也是泛型类

      public class SubOrder02<T> extends Order<T>{}
      
      • 1
    • 注意定义泛型方法:

      //错误写法:编译器会认为`E`是一个java类,而不是泛型
      public List<E> copyFromListToArray(E[] array){
        ArrayList<E> list = new ArrayList<>();
      
        for (int i = 0; i < array.length; i++) {
          list.add(array[i]);
        }
        return list;
      }
      
      //正确写法
      public <E> List<E> copyFromListToArray(E[] array){
        ArrayList<E> list = new ArrayList<>();
      
        for (int i = 0; i < array.length; i++) {
          list.add(array[i]);
        }
        return list;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19

  • 相关阅读:
    Spring Security—配置(Configuration)
    C++ vector容器
    nacos鉴权报invalid username or password
    SpringBoot整合JSP笔记整理
    为何说AI是网络安全的未来?
    uboot启动linux kernel的流程
    oracle11g网络配置
    Python中的self与类的理解
    C语言每日一练——Day01:求最大公约数(三种方法)
    Java刷题day33
  • 原文地址:https://blog.csdn.net/qq_48575500/article/details/126525364