해결된 질문
작성
·
220
0
안녕하세요,
해당 강의에서 materialize / dematerialize 파트에서 언급된 concatEager( ) 연산자에 알아보면서 어떻게 사용해야하는 것인지 정확히 알고 싶습니다.
- Observable.java (concat 연산자)
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static <T> Observable<T> concat(ObservableSource<? extends T> source1, ObservableSource<? extends T> source2) {
ObjectHelper.requireNonNull(source1, "source1 is null");
ObjectHelper.requireNonNull(source2, "source2 is null");
return concatArray(source1, source2);
}
- Observable.java (concatEager 연산자)
@CheckReturnValue
@SchedulerSupport(SchedulerSupport.NONE)
public static <T> Observable<T> concatEager(ObservableSource<? extends ObservableSource<? extends T>> sources) {
return concatEager(sources, bufferSize(), bufferSize());
}
위 API 소스를 보다시피 concatEager의 파라미터는 'ObservableSource<? extends ObservableSource<? extends T>>' 타입을 넣어야 한다고 명시가 되어있는데요,
저 모양이 예제 'ObservableMaterialExample02.java'처럼 Observable.just( ... )의 파라미터에 Observable 넣어야하는 형태인건가요?
저런 타입이 어떠한 모양인지 감이 안잡혀서 여쭤봅니다.
답변 1
0
"위 API 소스를 보다시피 concatEager의 파라미터는 'ObservableSource<? extends ObservableSource<? extends T>>' 타입을 넣어야 한다고 명시가 되어있는데요,
저 모양이 예제 'ObservableMaterialExample02.java'처럼 Observable.just( ... )의 파라미터에 Observable 넣어야하는 형태인건가요?"
--> 네, 맞습니다. "ObservableSource<? extends ObservableSource<? extends T>>" 바깥쪽에 있는 ObservableSource(빨간색)가 Observable.just()이구요. 이 ObservableSource의 파라미터는 ObservableSource의 하위 자료형이어야 한다고 한정적 제너릭으로 명시가 되어 있는것을 볼 수 있습니다.(아래 빨간색 하일라이팅 부분)
"ObservableSource<? extends ObservableSource<? extends T>>"
그리고, "ObservableSource<? extends ObservableSource<? extends T>>" 그리고 이 부분은 Observable.just( ) 안에 파라미터로 입력되는 각각의 Observable 들의 파라미터(통지하는 데이터)들을 T 타입의 하위 자료형으로 제한을 하고 있습니다. 여기서는 각각 String 타입의 데이터를 통지를 하고 있구요.
이건 RxJava와는 별개로 Java의 제너릭에 대한 문법에 대한 헷갈림인데 제너릭에 대해서 조금 더 살펴보시면 이해가 되실 것 같습니다.
아 처음에는 저 '? extends ObservableSource' 부분 때문에 헷갈렸는데,
'?'에 ObservableSource을 상속받은 Observable 객체을 대입해서 생각해보니 이제야 이해가 되네요;
항상 친절한 답변 감사합니다!