問題タブ [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 - java メソッドの注釈を scala で動作させるにはどうすればよいですか?
scala プロジェクトと java プロジェクトの 2 つのプロジェクトがあります。私の scala プロジェクトは、ビルド パスで Java プロジェクトを参照します。私の Java プロジェクトでは、次の注釈を宣言しています。
私の scala プロジェクトでは、いくつかのメソッドに注釈を付けています。いえ
どこかの別のファイルで、注釈を引き出そうとしています。
残念ながら、annotations
常に空の配列です。私は根本的に間違ったことをしていますか、それとも些細なことを見逃しているだけですか? ありがとう!
編集
もともと、myMethod に myAnnotation で 2 回注釈を付けていましたが、これは誰かが指摘したように正しくありません。これは問題ではなかったことがわかりました。の空の配列をまだ取得していannotations
ます。例外はスローされていません。
scala - Scala で Java varargs メソッドをオーバーライドするにはどうすればよいですか?
次のようなJavaで定義されたメソッドがあります。
Scala でそれをオーバーライドする必要がありますが、どちらもエラーになります。
エラーは参照して<repeated...>
いますが、それが何であるかわかりません。
アップデート
うーん…気にしないで。私は 2.10.0 を使用していますが、タイプミスがあり、メソッド本体がありませんでした。その後、このエラー メッセージに混乱しましたが、これはまだ奇妙に思えます。SBT では:
問題は、visitTableSwitchInsn
単に本体がないことですが、エラーは、問題が varargs パラメーターの型であることを示唆しています。
java - ScalaとJavaの混合:一般的に型付けされたコンストラクターパラメーターを正しく取得する方法は?
私のコントロールの外のどこかにpayload
ジェネリック変数を定義するレガシーJavaコードがあります(つまり、その型を変更することはできません):
コードでメソッドパラメーターなどの値を受け取りpayload
、それをScalaに渡したいcase class
(アクターシステムでメッセージとして使用するため)が、少なくともコンパイラー警告が表示されないように定義を正しく取得しない。
これにより、コンパイラに「型安全性:コンストラクタ...はraw型に属します...」という警告が表示されます。
Scalacase class
は次のように定義されます。
コードがきれいにコンパイルされるようにケースクラスを定義するにはどうすればよいですか?(残念ながら、JavaWrapper
クラスのコードやpayload
パラメーターのタイプを変更することはできません)
ペイロードパラメータの起源を明確にするために更新されました
追加payload
比較のために、Javaでは、変数が定義されているのとまったく同じ方法でパラメーターを定義できます。
それに応じてそれを呼び出す
ただし、「raw型」の警告が表示されない限り、たとえばWrapperオブジェクトを直接インスタンス化することはできません。ここでは、static
ヘルパーメソッドを使用する必要があります。
この静的ヘルパーを使用して、Wrapper
オブジェクトをインスタンス化します。
解決
同様のヘルパーメソッドをScalaコンパニオンオブジェクトに追加できます。
Javaからこれを使用して、ScalaMessage
問題のないクラスをインスタンス化します。
誰かがよりエレガントな解決策を思い付かない限り、私はこれを答えとして抽出します...
ありがとうございました!
java - java を使用したコレクション変換を scala に変換する方法
以下のコードは、タイプList<TestObj>
のリストをタイプのリストに変換します。ここで、タイプのList<List<String>>
各リスト要素List<List<String>>
はサイズ 1 の文字列リストです。これは非常に反復的なアプローチですが、scala を使用してより機能的なメソッドに変換できますか 考えられる解決策: パターン マッチをオンにしList<String>
て、すべての head 要素で新しい List を作成するだけですか?
以下の Java コードの出力:
java - Scala と Java ジェネリック -- 入れ子になった型を抽出して返す
Java ジェネリックは、式の戻り値の型に基づいて、ジェネリック型パラメーターの型を推測できます。次の点を考慮してください。
次のように呼び出すことができます。
これはコンパイルされますが、呼び出されると a がスローされます。これは、を aRuntimeException
にキャストしようとして失敗するためです。しかし要点は、Javaがコールサイトで予想される結果の型に基づいて の値を推測したことです。Map
String
<T>
これは、Scala で次のように行うこともできます。
ここまでは順調ですね。
Java は、ネストされた定義から型引数を推測し、それらを返すこともできます (つまり、型を使用する前に、上記のように使用するために結果を実際に型に割り当てる必要はありません。Java はそれが既に何であるかを知っています)。
これを示す簡単なクラス:
ただし、Scala では、このクラスが問題を引き起こします。REPL:
put()
型パラメーターの値を指定するための 2 つの呼び出しは機能しますが、パラメーターの継承からパラメーターを抽出する必要があるV
とすぐに、問題が発生します。Java コードにはそのような問題はありません。V
K
Scala が文句を言わないようにする唯一の方法は、型を明示的に定義することです。
(上記のような単純で工夫されたものについては、わずかに問題ありません (DRY に違反します)。しかし、スタンフォード コア NLP API のような、より複雑なものについては、次のようなことを行う必要があります。
ネストされたタイプを手動で検索して追加できるようにすることは、非常に面倒です。)
質問):
型パラメータをそれほど詳細に指定せずにこれを機能させる方法はありますか? さらに重要なことは、そもそもなぜこれが問題なのかということです。Scalaがそうでない場合、Javaはどのようにして型引数を推測できますか?
編集 1 : スタンフォード コア NLP の問題を示すコードのほとんどを削除し、問題を例示する Scala/Java ジェネリックの違いの一般的な例に置き換えました。
java - Javaでscala.Intをインスタンス化する
Play2フレームワークのSecureSocialプラグインの永続性レイヤーを作成しています。https://github.com/play-modules/modules.playframework.org/blob/master/app/models/ss/MPOOAuth2Info.javaで例を見つけました:
しかし、APIが変更されたため、使用できませんsecuresocial.core.java.OAuth2Info
。SecureSocialはScalaによって作成され、このクラスはJavaフロントエンドでした。そこで、Scalaを直接使用することにしました。
私の結果:
scala.Int
しかし、型への/型からの変換に問題がありjava.lang.Integer
ます。に変換するscala.Int
には、java.lang.Integer
を使用しscala.Int.unbox()
ました。接続方法ですか?そして、私は疑似コードを入力したコードで:に変換java.lang.Integer
する方法がわかりません。このSOME_TRANSFORMATIONの正しい実装は何ですか?scala.Int
SOME_TRANSFORMATION()
ありがとうございました
java - Javaのscala.Eitherを使用する
私はJavaのscalaライブラリ、具体的にはを返す関数を使用していますEither[A, B]
。私のJavaコードでは、次のことができます。
result.right()
を返しますがRightProjection
、Javaにインポートできません(IntelliJを使用)。Javaでどちらかのオブジェクトを処理する適切な方法はありますか?
scala - Java から Unit 戻り値の型を持つ PartialFunction を取る Scala 関数を呼び出すにはどうすればよいですか?
Java で Scala PartialFunction を実装する最も簡単な方法は何ですか? でoxbow_lakesによって説明されているスキャフォールディングを使用しようとしています。PartialFunction を取る Scala メソッドを呼び出す。これが私のScalaコードです:
そして、これが私がJavaからそれを呼び出そうとしている方法です:
コンパイラは私に教えてくれます:
scala - Scala 2.10 で java.lang.Class[T] の Scala Type を取得する
私はscala リフレクションの概要java.lang.Class<T>
を見ていましたが、Scala 2.10 で a を Type として使用できるかどうか疑問に思っています。
parse[T](clazz: Class[T]): ru.Type
を使用してJavaから呼び出すことができるようにするために、署名を変更せずにメソッドを実装することは可能new Reflector().parse(String.class)
ですか?
scala - リストの変換Seq[(String,String)] に
の含むデータを@helper.select
指定するフォーム Play 2 テンプレート エンジンを使用したいと考えています。しかし、私は持っています。そして、私はScalaをかなり弱く知っています。Seq[(String,String)]
<options>
List<Enum>
このヘルパーがなければ、次の<select>
コードを使用して入力します。
カテゴリの定義:
テストでは、Play2 の inputRadioGroup のoptions = options("1" -> "1", "2" -> "2", "3" -> "3", "4" -> "4", "5" -> "5")
フォームJava の例を使用しました
どうすれば私Seq[(String,String)]
の から取得できList<Enum>
ますか?
ありがとう