私は Scala で小さな JavaFx アプリケーションを作成しており、これには RxScala と RxJavaFx を使用するのが好きです。次のコードでRxJava Observableを取得します。
JavaFxObservable.fromObservableValue(textfield.textProperty())
明らかに、私は Scala で書いているので、代わりにRxScala Observableを使いたいと思っています。今、この投稿JavaConversions._を見つけました。暗黙の変換クラスをインポートするか、直接呼び出す必要があると言っていますtoScalaObservable。ただし、最初のオプションではうまくいきません。2 番目のオプションは見栄えが悪くなります。
オプション1:
import rx.lang.scala.JavaConversions._
JavaFxObservable.fromObservableValue(textfield.textProperty())
.map(s => /* do something */)
map引数の型は技術的には異なりますが、RxJava も演算子を提供するため、これは機能しません。
オプション 2:
import rx.lang.scala.JavaConversions._
toScalaObservable(JavaFxObservable.fromObservableValue(textfield.textProperty()))
.map(s => /* do something */)
これは機能しますが、正直なところ、これは本当にひどいものに見えます!
質問 1:何かが足りないのでしょうか、それとも本当にこの 2 つの選択肢しかないのでしょうか?
つまり、Java の標準コレクションから Scala のコレクション (およびその逆) に変換するには、2 つのオプションがあります:JavaConvertersとJavaConversions. 前者はキーワードasJava/を導入しasScalaますが、後者は一種の同等のものでrx.lang.scala.JavaConversionsあり、暗黙的に変換を行います (運が良ければ!)。これら 2 つの設定をグーグルで調べると、ほとんどの人がキーワードをJavaConverters使用したより明示的な暗黙の変換を好むことは明らかです。asScala
質問 2:JavaConverters RxScalaのような類似の構造はありますか? これにより、上記のコードがよりクリーンになります。
import rx.lang.scala.JavaConverters._ // this class doesn't exist!
JavaFxObservable.fromObservableValue(textfield.textProperty())
.asScala
.map(s => /* do something */)