java-泛型

什么是泛型

泛型就是参数化类型,就是将类型由原来具体的类型参数化。

为什么要使用泛型:能够在不创建新类型(重新编写一个java.class)的情况下通过泛型指定的不同类型来控制形参具体限制的类型

Java中的泛型是一个伪泛型,类型擦除(java的泛型是在编译器这个层次上实现的)

(list<string>right,list<integer>left)java在编译期间所有的类型都会被擦除,生成的字节码不包含泛型的类型信息的。编译之后right和left都会变成class java.util.ArrayList;c++中的泛型是一个伪泛型

Left集合通过反射在运行时获得add方法能够添加字符串。

list.getClass().getMethod("add",Object.class).invoke(list,"abcd");

泛型的特性

        1.先检查,后编译

        2.不支持继承

        3.不能是基本数据类型

        4.泛型的类型参数不能是简单类型,只能是类类型

        如果传递的是类类型能够正确的打印参数是什么

               泛型类型在逻辑上可以看作是多个不同的类型,实际上都是相同的基本类型

        如果传递的是简单类型,实际上打印的是一个地址

                int数组被作为一个类型值传递,一旦传递的是一个简单类型,java就会认为整个的简单类型的数组当作一个类型值传递,不会认为简单类型数组中的123是传递的一个个数值

不要使用原始类型

        原始类型:不去指定具体的类型

        使用原始类型的场景: 将一些不同的数据类型封装成一个对象

        使用原始类型的缺点: 如果需要在代码总做一些处理,可能会抛出运行时异

优化建议

  • 初步优化:使用List<Object>至少告诉编译器,容器中存放任意类型的对象
  • 更进一步优化:构建一个实体类例如People,将不同的数据类型作为它的一个个属性,明确的指定具体的类型,把类型检查的工作交给编译器来完成,List<People>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值