系列文章
RxJava系列之简介和观察者设计模式
RxJava系列之上游与下游
RxJava系列之常用创建型操作符
RxJava系列之常用变换操作符
RxJava系列之常用过滤操作符
RxJava系列之常用条件操作符
RxJava系列之常用合并操作符
RxJava系列之常用异常操作符
RxJava系列之线程切换实战
RxJava系列之背压模式
RxJava系列之配合Retrofit
RxJava系列之泛型高级
RxJava系列之手写create操作符
RxJava系列之手写create操作符增加泛型限定
RxJava系列之手写just操作符
RxJava系列之手写map操作符
RxJava系列之手写切换线程
just操作符
just操作符也是创建操作符,为了创建Observable。与create的区别是,just操作符内部自动发射事件,不需要像create操作符 那样手动发射事件。
增加just操作符的Observable
// todo 被观察者 上游
public class Observable<T> { // 类声明的泛型T Int
ObservableOnSubscribe source;
private Observable(ObservableOnSubscribe source) {
this.source = source;
}
// 静态方法声明的<T>泛型 ObservableOnSubscribe<T>==静态方法声明的<T>泛型
// 参数中:ObservableOnSubscribe<? extends T> 和可读可写模式没有任何关系,还是我们之前的那一套思想(上限和下限)
public static <T> Observable<T> create(ObservableOnSubscribe<? extends T> source) { // int
return new Observable<T>(source); // 静态方法声明的<T>泛型 int
}
// 1 2 3 4 可变参数
public static <T> Observable<T> just(final T... t) { // just 内部发射了
// 想办法让 source 是不为null的, 而我们的create操作符是,使用者自己传递进来的
return new Observable<T>(new ObservableOnSubscribe<T>() {
@Override
public void subscribe(Observer<? super T> observableEmitter) { // observableEmitter == Observer
for (T t1 : t) {
// Observer.onNext(1);
// 发射用户传递的参数数据 去发射事件
observableEmitter.onNext(t1);
}
// 调用完毕
observableEmitter.onComplete(); // 发射完毕事件
}
});
}
// 单一
public static <T> Observable<T> just(final T t) {
return new Observable<T>(new ObservableOnSubscribe<T>() {
@Override
public void subscribe(Observer<? super T> observableEmitter) {
// 发射用户传递的参数数据 去发射事件
observableEmitter.onNext(t);
// 调用完毕
observableEmitter.onComplete(); // 发射完毕事件
}
});
}
// 2个参数
public static <T> Observable<T> just(final T t, final T t2) {
return new Observable<T>(new ObservableOnSubscribe<T>() {
@Override
public void subscribe(Observer<? super T> observableEmitter) {
// 发射用户传递的参数数据 去发射事件
observableEmitter.onNext(t);
observableEmitter.onNext(t2);
// 调用完毕
observableEmitter.onComplete(); // 发射完毕事件
}
});
}
// 3个参数
public static <T> Observable<T> just(final T t, final T t2, final T t3) {
return new Observable<T>(new ObservableOnSubscribe<T>() {
@Override
public void subscribe(Observer<? super T> observableEmitter) {
// 发射用户传递的参数数据 去发射事件
observableEmitter.onNext(t);
observableEmitter.onNext(t2);
observableEmitter.onNext(t3);
// 调用完毕
observableEmitter.onComplete(); // 发射完毕事件
}
});
}
// 4个参数的
public static <T> Observable<T> just(final T t, final T t2, final T t3, final T t4) {
return new Observable<T>(new ObservableOnSubscribe<T>() {
@Override
public void subscribe(Observer<? super T> observableEmitter) {
// 发射用户传递的参数数据 去发射事件
observableEmitter.onNext(t);
observableEmitter.onNext(t2);
observableEmitter.onNext(t3);
observableEmitter.onNext(t4);
// 调用完毕
observableEmitter.onComplete(); // 发射完毕事件
}
});
}
// new Observable<T>(source).subscribe(Observer<Int>)
// 参数中:Observer<? extends T> 和可读可写模式没有任何关系,还是我们之前的那一套思想(上限和下限)
public void subscribe(Observer<? extends T> observer) {
observer.onSubscribe();
source.subscribe(observer); // 这个source就有了 观察者 Observer
}
}
just操作符测试
// TODO just 操作符
// 上游
Observable.just("A", "B", "C", "D", "E", "F", "G") // todo 内部执行了第二步
// 订阅
.subscribe(new Observer<String>() {
@Override
public void onSubscribe() {
// todo 1
Log.d(TAG, "已经订阅成功,即将开始发射 onSubscribe: ");
}
@Override
public void onNext(String item) {
// todo 3
Log.d(TAG, "下游接收事件 onNext: " + item);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
// todo 4
Log.d(TAG, "onComplete: ");
}
});