语法:

    class类名{ 成员 }

    注意细节:

    • 普通成员可以使用泛型(属性、方法)
    • 使用泛型的数组,不能初始化
    • 静态方法中不能使用类的泛型
    • 泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确足类型)
    • 如果在创建对象时,没有指定类型,默认为Object ```java package test;

    import java.util.Arrays;

    public class Main { public static void main(String[] args) {

    1. //T=Double, R=String, M=Integer
    2. Tiger<Double,String,Integer> g = new Tiger<>("john");
    3. g.setT(10.9); //OK
    4. //g.setT("yy"); //错误,类型不对
    5. System.out.println(g);
    6. Tiger g2 = new Tiger("john~~");//OK T=Object R=Object M=Object
    7. g2.setT("yy"); //OK ,因为 T=Object "yy"=String 是Object子类
    8. System.out.println("g2=" + g2);
    9. }

    }

    //老韩解读 //1. Tiger 后面泛型,所以我们把 Tiger 就称为自定义泛型类 //2, T, R, M 泛型的标识符, 一般是单个大写字母 //3. 泛型标识符可以有多个. //4. 普通成员可以使用泛型 (属性、方法) //5. 使用泛型的数组,不能初始化 //6. 静态方法中不能使用类的泛型 class Tiger { String name; R r; //属性使用到泛型 M m; T t; //因为数组在new 不能确定T的类型,就无法在内存开空间 //T[] tr = new T[8];//报错!!! T[] ts;

    1. public Tiger(String name) {
    2. this.name = name;
    3. }
    4. public Tiger(R r, M m, T t) {//构造器使用泛型
    5. this.r = r;
    6. this.m = m;
    7. this.t = t;
    8. }
    9. public Tiger(String name, R r, M m, T t) {//构造器使用泛型
    10. this.name = name;
    11. this.r = r;
    12. this.m = m;
    13. this.t = t;
    14. }
    15. //因为静态是和类相关的,在类加载时,对象还没有创建
    16. //所以,如果静态方法和静态属性使用了泛型,JVM就无法完成初始化

    // static R r2;//报错!!! // public static void m1(M m) {//报错!!! // // }

    1. //方法使用泛型
    2. public String getName() {
    3. return name;
    4. }
    5. public void setName(String name) {
    6. this.name = name;
    7. }
    8. public R getR() {
    9. return r;
    10. }
    11. public void setR(R r) {//方法使用到泛型
    12. this.r = r;
    13. }
    14. public M getM() {//返回类型可以使用泛型.
    15. return m;
    16. }
    17. public void setM(M m) {
    18. this.m = m;
    19. }
    20. public T getT() {
    21. return t;
    22. }
    23. public void setT(T t) {
    24. this.t = t;
    25. }
    26. @Override
    27. public String toString() {
    28. return "Tiger{" +
    29. "name='" + name + '\'' +
    30. ", r=" + r +
    31. ", m=" + m +
    32. ", t=" + t +
    33. ", ts=" + Arrays.toString(ts) +
    34. '}';
    35. }

    } ``` image.png