泛型大家肯定都不陌生,java中随处可见泛型,我们编程前期不用怎么关注,但是到了后期,开始写框架,开发高质量的代码的时候,就必须要十分的关注了。
本篇文章,我们就是总结基础,熟悉概念的概念
概念
什么是泛型呢?
- 本质: 将类型(类、接口)参数化,可以传递
- 通俗讲: 就是 我们在编程中可以动态的传递类型,类型可以不是固定的。目的就是为了灵活
使用
定义方式三种
- 在class类(可以是抽象类)中定义:
public class Demo <T>{}
- 在inteface中定义
public interface Demo <T>{}
- 在方法中定义
public <T> void testGenerics(int a){}
public <T> void testGenerics(T a){}
public <T> T testGenerics(T a){}
public <T extends View> T testGenerics(T a){}
- T是随便写的,写A,B…都没问题
- <T> 定义泛型的方式
使用说明
- 修饰 成员变量
public T a;
- 作为方法返回值
public T get(){}
- 修饰方法的形参
public void get(T params){}
特别说明
你以为这个 T 就可以当作正常的类型使用了吗,这就太天真了
局限性
- T修饰的变量 调用问题
<T>定义的: T 修饰的变量,你不能调用 它的任何属性
<T extends View>定义的:T 修饰的变量, 你可以访问View的所用的东西。 - T是不是正常的类呢?
测试:调用T的class属性
测试结果:不能调用。
3.T 类型强制转换
没有报错可以使用。
使用场景
- 数据解析:json或xml等格式的数据 解析为对应的类,给解析器传入类型,返回次类型的实体
- 适配器:使用RecycleView时,ViewHolder 需要我们传入我们自己实现的ViewHolder类,适配器讲我们自定义的类当作形参的形式返回给我们使用,我们就可以使用自己的类中定义的View了
- 数据结构:HashMap,ArrayList 等,规范存入数据的类型
- 数据的传递:RxJava中我们会在使用的时候,就确定处理的类型,在链式调用的时候,的参数,返回值我们都可以自动的定义成我们的类了
假如Java没有泛型
需要使用Object来代替所有可变的类型了,但是这样,需要强制转换,并且还会造成类型混乱
如有不足,或者错误,欢迎大家批评指正 QQ:1187502892