問題タブ [scala-java-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Scala は Java クラスを参照できない
チェス AI サーバー用の Java フレームワークがあります。Scala を使用して、チェス AI のロジックを作成する予定です。そのため、フレームワークの「AI」クラスを編集して、Scala コードを呼び出す必要があります。
Scala で Java フレームワークからクラスを参照しようとすると、次のパターンのエラーが発生します。
私が見つけた最も関連性の高いものはこれでした: scala アクセス修飾子の保証は何ですか? 、しかし、それは私をまったく助けません。
次に、これを見つけました: .java と .scala クラスの間に循環依存関係を持つことは可能ですか? Maven ソリューションをセットアップしてみますが、最終的には make を使用してコンパイルし、シェル スクリプトを使用して実行する必要があります。
ダミー クラスを作成することは、不十分な解決策のように思えます。フレームワークを編集したり、再コンパイルしたり、Scala クラスの呼び出しに関する不満を修正したりしたくありません。
なぜこれが問題なのか、私は少し混乱しています。Java 構文を使用して任意のネイティブ Java 関数を呼び出すことができますが、問題ありません。フレームワークを jar に入れてそのように参照した場合でも、なぜこれが起こるのですか?
java - ScalaでのJavaライブラリの使用
私はScalaを初めて使用します。今のところ基本的なコードしか書けませんが、理論を学ぶだけでなく、もっと具体的に使い始めたいと思います。
HelloWorld.javaに次のJavaコードがあるとします。
Scalaからそれを呼び出すためのコードは何でしょうか?
java - Scala:可能な識別子として「val」? Javaライブラリへのリンクにはそれが必要です
私のスカラ コードでは、"val" というパブリック属性を持つオブジェクトを定義する Java ライブラリを使用しています。
この属性をscalaで取得する方法はありますか?
scala - Java リフレクションで Scala リフレクションを使用する
DSL の一部として、Java オブジェクトで任意のユーザー指定メソッドを呼び出すために Java リフレクションを使用しているコードがたくさんあります。
ただし、実際には、これらの Java オブジェクトの多くは Scala オブジェクトであり、それらのメソッドの一部は Scala@deprecated
アノテーションでマークされています。残念ながら、Java のアノテーション メカニズムは Scala アノテーションを認識できません。Scala 2.10 までは、これらのアノテーションにアクセスする便利な方法がありませんでした (私が知っていますか?)。
ようやく 2.10 にアップグレードしました。DSL から非推奨の警告を発したいと考えています。ただし、Scala リフレクションを使用するように (少なくとも今のところ) エバリュエーター全体を書き直したくはないので、Scala リフレクションをjava.lang.reflect.Method
使用して Scala メソッドが質問は非推奨ですか?それとも、その情報を取得する前に、Scala リフレクションを使用して既存のメソッド解決ロジックの多くを複製する必要がありますか?
JavaToScala
Scala リフレクションに存在していたクラスのように見えます。このクラスmethodToScala
には、私が望むことを実行するメソッドが含まれていました。私が見つけることができる唯一のトレースは、Google コード プロジェクトのhereです。機能がコア リフレクションから移動されたのはなぜですか? それとも別の名前でまだ存在しますか?
編集: 問題のコードは に残っているようですscala.reflect.runtime.JavaMirrors
が、残念ながら非公開です (JavaMirrors
パブリック API の一部ですが、必要なものを提供していないものがあります)。 privatemethodAsScala
の奥深くに埋め込まれた private に至るまで、パブリック API を介した呼び出しの「パス」がある場合は me JavaMirrors
。控えめに言っても、イライラします:(
android - Scala からの代替を使用して Java メソッドを呼び出す
put
ScalaからAndroid APIのクラスのメソッドを使おうとしているのですContentValues
が、Scalaにリスト要素の型を絞り込ませる方法がわかりません。例えば :
... 「オーバーロードされたput
メソッドと代替手段」put(String, String)
をput(String, Int),...
解決できないという大まかなエラーが発生します。
私の直感は、おそらくリフレクションを使用する必要があると言っていますが、それを正確に行う方法がわかりません。ポインターはありますか?
java - Java とインターフェースするときの Scala 型/コレクション、およびその逆
Java の scala ライブラリ、または scala の Java ライブラリとインターフェースする場合、変換を実行するために「高価な」操作を実行しなければならないような、効率的にマップされない特定のタイプまたはコレクションがありますか?
たとえば、メモリに関しては、コレクションの 2 つのコピーを保持する必要がある場合がありますか?
java - Scala と Java の相互運用。未来の
この問題では、たとえば as をjava.util.concurrent.Future
返す Scala ルーチンからの結果を期待するサードパーティの Java ライブラリを呼び出す必要があります。scala.concurrent.Future
Scala-Future を新しい Java-Future にラップしますが、ラップされた Scala-Future を中断する方法で Java-Future メソッドを実装する方法はありdef cancel(mayInterruptIfRunning: Boolean): Boolean
ません (そうでない場合はお知らせください)。
どうすればこの問題を解決できますか? これらは私が思いついたアプローチです:
- とにかくラッパーを書き、呼び出しを無視する
cancel
(またはスローするNotImplementedError
) someScalaFunction
Scala または Java Future で呼び出し元によってラップされるクロージャを返すように変更します。
1. の問題は、一部のクライアントが の適切な実装に依存する可能性があることですが、cancel
それほど重要ではない可能性があります。2.本当に醜いAPIになります。
list - java.util.List を Scala リストに変換する方法
以下のエラーのあるこのScalaメソッドがあります。Scala リストに変換できません。
型の不一致; 見つかった:java.util.List[com.aitrich.learnware.model.domain.entity.Question]
必須:
scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]