どのくらい RxJava に依存したプログラムにするかで変わりますが、全面的に RxJava を使うのであれば、以下のようになります。
java
1String _name;
2
3public Observable<String> getNameAsObservable() {
4 return Observable.<String>create(new Observable.OnSubscribe<String>() {
5 @Override
6 public void call(Subscriber<? super String> subscriber) {
7 if (_name != null) {
8 // 値が設定されいればそのまま値を返却
9 subscriber.onNext(_name);
10 subscriber.onCompleted();
11 return;
12 }
13
14 // 無かった場合、非同期で値を取得し、結果を返却
15 someAsyncFunc(new OnSomeCallback() {
16 void callback(String returnValue) {
17 subscriber.onNext(_name);
18 subscriber.onCompleted();
19 }
20 });
21 }
22 });
23}
getter 自体を Observable<String>
にし、利用する側でこれを subscribe()
します。
「非同期処理」のところが RxJava に対応したライブラリがあるのなら、それを利用した方がより簡単に書けます。
参考)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。