2

私は 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 つのオプションがあります:JavaConvertersJavaConversions. 前者はキーワード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 */)
4

3 に答える 3

0

この質問は、RxScala プロジェクトでのこのプル リクエストの出発点でした。

元の質問で提案された構文は、インポートすることで使用できますrx.lang.scala.JavaConverters

import rx.lang.scala.JavaConverters._
JavaFxObservable.fromObservableValue(textfield.textProperty())
  .asScala
  .map(s => /* do something */)

同様に、Scalaはを使用Observableして Java に変換できます。ObservableasJava

使用目的のも参照してください。

于 2016-09-29T17:57:03.853 に答える