我在Scala中編寫了一個小型的JavaFx應用程序,我喜歡使用RxScala和RxJavaFx。用下面的代碼,我收到了RxJavaObservable
:將RxJava Observable轉換爲RxScala Observable
JavaFxObservable.fromObservableValue(textfield.textProperty())
顯然,正如我在斯卡拉寫,我想有一個RxScalaObservable
來代替。現在我找到了this post,說我要麼直接導入隱式轉換類JavaConversions._
,要麼直接調用toScalaObservable
。然而,第一個選項,我和第二個選項不這樣做看起來有點醜:
選項1:
import rx.lang.scala.JavaConversions._
JavaFxObservable.fromObservableValue(textfield.textProperty())
.map(s => /* do something */)
這不起作用,因爲RxJava提供map
操作員好吧,儘管論證的類型在技術上講是不同的。
選項2:
import rx.lang.scala.JavaConversions._
toScalaObservable(JavaFxObservable.fromObservableValue(textfield.textProperty()))
.map(s => /* do something */)
這工作,但說實話的人,這看起來真的很可怕!
問題1:我是否錯過了一些東西,或者這些確實是唯一的兩個選擇嗎?
我的意思是,要從Java的標準集合轉換爲Scala的集合(反之亦然),您有兩個選項:JavaConverters
和JavaConversions
。前者引入了一個關鍵字asJava
/asScala
,而後者則相當於rx.lang.scala.JavaConversions
,併爲您隱式轉換(如果您幸運的話!)。谷歌搜索這兩個偏好,很顯然,大多數人更喜歡JavaConverters
與asScala
關鍵字更明確的隱式轉換。
問題2:有沒有類似的結構像JavaConverters
與RxScala?這將使上面這麼多清潔的代碼,我會說:
import rx.lang.scala.JavaConverters._ // this class doesn't exist!
JavaFxObservable.fromObservableValue(textfield.textProperty())
.asScala
.map(s => /* do something */)
說實話,我真的很喜歡所有運營商的鏈接。這是Rx API的定義權力之一(與Scala Collections API一樣)。不得不引入額外的'val's,包括明確的輸入,這並不是我特別喜歡在Scala中看到的東西。這是一個可行的把戲,這是一定的!我會進一步研究這個問題,並且肯定會考慮將這個討論移到RxScala問題上。我想我可以在那邊自己做拉請求。讓我們繼續堅持下去! – RvanHeest