2016-11-22 2 views
4

после того, как оператор toList выполняет, оригинал Flowable < < \ Список >> конвертирует в Single < < \ List >>. и получается, если я создаю Consumer для подписки на Single, , тип потребительского значения не может быть изменен кроме Object?Не удается разрешить метод 'subscribe (anonymous io.reactivex.functionx.Consumer <java.util.List <...>>)' в rxjava2?

@Override 
public void loadBannerData(final ADFilterType adFilterType) { 
    remoteListDataSource.getBannerListData(adFilterType) 
      .flatMap(new Function<List<BannerBeanList.BannerBean>, Publisher<?>>() { 
       @Override 
       public Publisher<?> apply(List<BannerBeanList.BannerBean> bannerBeen) throws Exception { 
        return Flowable.fromIterable(bannerBeen); 
       } 
      }) 
      .toList() 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      /******************************Consume Value Type************************** 
      .subscribe(new Consumer<List<BannerBeanList.BannerBean>>() { 
       @Override 
       public void accept(List<BannerBeanList.BannerBean> bannerBeens) throws Exception { 
        mainTabView.showMainBanner(bannerBeens); 
       } 
      }); 
      *****************************************************************************/ 
} 
+3

Это происходит потому, что у вас есть 'Publisher ' вместо 'Publisher ' в вашем коде. – akarnokd

+0

@akarnokd thanks, я должен указать тип элемента, который должен быть опубликован. – Qin

ответ

5

Из моего комментария: это происходит потому, что у вас есть Publisher<?> вместо Publisher<BannerBeanList.BannerBean> в вашем коде. Часто IDE не могут выводить типы лямбда или функциональных интерфейсов, и в итоге вы получите? или Object в качестве своего типа при использовании некоторой функции рефакторинга generate/convert.

+0

Что значит «у вас есть Publisher вместо Publisher» – minhaz

+0

Обновлен ответ, тип argumen '<>' не был экранирован. – akarnokd