• Java泛型学习笔记


    1. 我们先写一个没有泛型的类Box:

     1 public class Box {
     2 
     3     private Object obj;
     4     
     5     public Box() {}
     6 
     7     public Object getObj() {
     8         return obj;
     9     }
    10 
    11     public void setObj(Object obj) {
    12         this.obj = obj;
    13     }
    14 
    15     public Box(Object obj) {
    16         super();
    17         this.obj = obj;
    18     }
    19 
    20 }

    这时我们可以存入任意类型的数据, 反正他们都是Object的子类, 存入时会自动类型提升. 没有任何检查方法.

    我们来将其改为带有泛型的类:

     1 public class Box<T> {
     2 
     3     private T obj;
     4     
     5     public Box() {}
     6 
     7     public T getObj() {
     8         return obj;
     9     }
    10 
    11     public void setObj(T obj) {
    12         this.obj = obj;
    13     }
    14 
    15     public Box(T obj) {
    16         super();
    17         this.obj = obj;
    18     }
    19 
    20 }

    就是这么简单, 只需在类名称的后面加上<T>即可, 在类中使用T来代表泛型指定的数据类型. 

    2. 这里顺便说一下类型参数的命名规范:
    理论上你可以起任何你想要起的名字, 但最好是单个大写字母, 下面是一些约定俗成规范:

    •  E - Element (在集合中使用,因为集合中存放的是元素)
    •  T - Type(Java 类)
    •  K - Key(键)
    •  V - Value(值)
    •  N - Number(数值类型)
    •  S、U、V  - 2nd、3rd、4th types

    3. 使用该类的时候, 我们就可以这样写:

    1 Box<String> b = new Box<>();
    2 b.setObj("aaa");
    3 // b.setObj(11); // 编译报错
    4 String s = b.getObj();

    4. 使用多个类型参数:

    在我们使用Map时应该已经注意到了, Map使用泛型时需要设定两个类型参数, 如HashMap<String, Integer>. 我们在定义自己的泛型类的时候也可以定义多个类型参数, 如:

     1 public class Box<T1, T2, T3> {
     2 
     3     private T1 t1;
     4     private T2 t2;
     5     private T3 t3;
     6     
     7     public Box() {}
     8     
     9     public Box(T1 t1, T2 t2, T3 t3) {
    10         super();
    11         this.t1 = t1;
    12         this.t2 = t2;
    13         this.t3 = t3;
    14     }
    15 
    16     public T1 getT1() {
    17         return t1;
    18     }
    19 
    20     public void setT1(T1 t1) {
    21         this.t1 = t1;
    22     }
    23 
    24     public T2 getT2() {
    25         return t2;
    26     }
    27 
    28     public void setT2(T2 t2) {
    29         this.t2 = t2;
    30     }
    31 
    32     public T3 getT3() {
    33         return t3;
    34     }
    35 
    36     public void setT3(T3 t3) {
    37         this.t3 = t3;
    38     }
    39 
    40 }

    使用:

    1 Box<String, Integer, Double> b = new Box<>("aaa", 10, 3.14);
    2 System.out.println(b.getT1());
    3 System.out.println(b.getT2());
    4 System.out.println(b.getT3());
  • 相关阅读:
    退休夫妇不顾反对坚持创业,把自己的品牌推向了市场
    年终将至,财务人如何做好数据分析?
    圣诞快乐:Oracle Database 19c 的10大新特性一览
    perl 获取表记录数
    rex 防止调度还没完成后又继续发起
    希腊女孩创办自媒体教希腊语,如今用户已达1000人
    在20天里赚三千多元,他靠创意经营商店,扩大了店面
    小杂货店的崛起,他坚信创新和拼搏是成功的两大法宝
    thinkphp
    thinkphp
  • 原文地址:https://www.cnblogs.com/zhenyu-go/p/5536248.html
Copyright © 2020-2023  润新知