java泛型要用t_为什么要用Java泛型

展开全部

从上面的内容中,大家已经明白了泛型的具体运作过程。也知62616964757a686964616fe4b893e5b19e31333363393564道了接口、类和方法也都可以使用泛型去定义,以及相应的使用。是的,在具体使用时,可以分为泛型接口、泛型类和泛型方法。

自定义泛型接口、泛型类和泛型方法与上述Java源码中的List、ArrayList类似。如下,我们看一个最简单的泛型类和方法定义:

18a4564c10600172fbfa25b0994a29b3.gif

1 public class GenericTest { 2  3     public static void main(String[] args) { 4  5         Box name = new Box("corn"); 6         System.out.println("name:" + name.getData()); 7     } 8  9 }10 11 class Box {12 13     private T data;14 15     public Box() {16 17     }18 19     public Box(T data) {20         this.data = data;21     }22 23     public T getData() {24         return data;25     }26 27 }

66e5aadcca98e5bf55b22e4339e05129.gif

在泛型接口、泛型类和泛型方法的定义过程中,我们常见的如T、E、K、V等形式的参数常用于表示泛型形参,由于接收来自外部使用时候传入的类型实参。那么对于不同传入的类型实参,生成的相应对象实例的类型是不是一样的呢?

37ea193096d60eae0ef79b0d91dffab7.gif

1 public class GenericTest { 2  3     public static void main(String[] args) { 4  5         Box name = new Box("corn"); 6         Box age = new Box(712); 7  8         System.out.println("name class:" + name.getClass());      // com.qqyumidi.Box 9         System.out.println("age class:" + age.getClass());        // com.qqyumidi.Box10         System.out.println(name.getClass() == age.getClass());    // true11 12     }13 14 }

33b2ac9757d1a40aed653c373a53844a.gif

由此,我们发现,在使用泛型类时,虽然传入了不同的泛型实参,但并没有真正意义上生成不同的类型,传入不同泛型实参的泛型类在内存上只有一个,即还是原来的最基本的类型(本实例中为Box),当然,在逻辑上我们可以理解成多个不同的泛型类型。

究其原因,在于Java中的泛型这一概念提出的目的,导致其只是作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。

对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值