一、为什么使用泛型?
架构中看到泛型是最多的,为什么要用泛型呢?
1.运行时不确定类型;
2.类型安全;
3.消除强制转换;
4.提高虚拟机性能。
泛型T:任意类型,继承自Object,利用T t 声明的变量,方法只有Object方法。
那么代码中通常用泛型extends继承某个类型,这里的extends与常规的子类继承父类有什么区别吗?
泛型extends关键字说明
上图中的extends不是类继承里的那个extends,两个根本没有任何关联。图中的extends后的BoundingType可以是类,也可以是接口,意思是说,T是在BoundingType基础上创建的,具有BoundingType的功能,可能是JAVA开发人员不想再引入一个关键字,所以用已有的extends来代替而已。重点是能取不能存
!!!
? extends Number
? super Number
这两者有什么区别呢?
1."? extends T" 表示类型的上界,表示参数化类型可能是T或者是T的子类,只能取,不能写;
2."? super T" 表示类型的下界,Java core中叫超类型限定,表示参数化类型是此类型的超类型(父类型),甚至是Object。只能写,不能取。
通配符讲解
二、RxJava手写实现
手写之前需要先确地几个角色:Observable:被观察者(顾客)、Oberserver观察者(厨师)、ObservableOnSubscribe(服务员);
2.1 Obervable:被观察者,事件的产生源:

2.2 ObervableOnSubscribe(服务员):观察者与被观察者连接的桥梁,本身起到发射器的作用,传递事件:

2.3 Observer(观察者):事件的消费者:

2.4 调用的简单实现:

网友评论