泛型,泛型擦除,T extends class

泛型,泛型擦除,T extends class

  • 泛型本质就是 参数化类型

  • 作用是提高Java程序的类型安全。并且还可以更好的代码复用性

    • 比如BaseDao,BaseService
  • 注意事项泛型不接受基本数据类型,不能有LIst这种形式出现

  • Java中的泛型是假泛型,因为在Java运行期间,所有的泛型信息都会被擦除,这个就是所谓的类型擦除。

    • 泛型擦除的实例作用:

      • List<String> l1 = new ArrayList<String>();
        List<Integer> l2 = new ArrayList<Integer>();
        		
        System.out.println(l1.getClass() == l2.getClass());
        
      • 最后的结果是true

      • 原因就是泛型信息只存在于代码编译阶段,在进入JVM之前,泛型相关信息会被擦除,只留下个list.class

  • 在了解了泛型擦除之后再看下面代码(目的就是想要一个list能够跳过编译器存储String类型的数据)

public class ToolTest {


	public static void main(String[] args) {
		List<Integer> ls = new ArrayList<>();
		ls.add(23);
//		ls.add("text");
		Method method = ls.getClass().getDeclaredMethod("add",Object.class);
			method.invoke(ls,"test");
			method.invoke(ls,42.9f);
}

  • 最后再介绍一下<T extends 数据类型><? extentds 数据类型>
    • T指定的是某一种具体的类型,这个类型是确定的
    • ?是一种未知的类型,调用方法的时候参数既可以是List也可以是List
    • 现有一个水果fruits父类,apple子类,现有一个类class A
      • 使用T extends fruits限定了泛型的上边界
      • 该类创建对象的时候限定了只能建立水果类和他的所有子类才行
      • new A or new A
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值