2017-06-04 86 views
0

我用retrolambda表達轉換爲經典

_rxBus = getRxBusSingleton(); 
    _disposables = new CompositeDisposable(); 

    ConnectableFlowable<Object> tapEventEmitter = _rxBus.asFlowable().publish(); 

    _disposables 
      .add(tapEventEmitter.subscribe(event -> { 

      if (event instanceof EmployeeMvvmActivity.TapEvent) { 
       _showTapText(); 
      } 

      })); 

一切工作正常。由於Roboelectric測試,我需要將retrolambda表達式轉換爲經典。我曾嘗試

_disposables.add(tapEventEmitter.subscribe(new Action1<Object>() { 
     @Override 
     public void call(Object event) { 
      if (event instanceof EmployeeMvvmActivity.TapEvent) { 
       _showTapText(); 
      } 
     } 
    })); 

我有錯誤無法解析法「訂閱(匿名rx.functions.Action1(java.lang.Object中)」。

+1

爲什麼你不能在你的測試使用retrolambda太目前尚不清楚。 – Logain

+0

通過使用retrolambda執行測試構建失敗。發生在編譯器(1.8例外。 0_101)。 – eurosecom

+1

Retrolambda也應該適用於您的測試,您可以在將代碼移動到java7匿名類之前嘗試修復該問題。 – Logain

回答

2

Action1當你使用Rx2的來自RX1 。相反,你必須使用Consumer接口。

_disposables.add(tapEventEmitter.subscribe(new Consumer<Object>() { 
    @Override 
    public void accept(Object event) { 
     if (event instanceof EmployeeMvvmActivity.TapEvent) { 
      _showTapText(); 
     } 
    } 
}));