Scalaのケースクラスからマップへ
2023-09-08 10:56:23
質問
Scala の
case class
のインスタンスを変換する方法はありますか?
case class MyClass(param1: String, param2: String)
val x = MyClass("hello", "world")
をある種のマッピングに変換します。
getCCParams(x) returns "param1" -> "hello", "param2" -> "world"
これは、定義済みのものだけでなく、どのようなケースクラスに対しても機能します。例えば、基礎となる Product クラスを問い合わせるメソッドを書くことで、ケースクラスの名前を引き出すことができることがわかりました。
def getCCName(caseobj: Product) = caseobj.productPrefix
getCCName(x) returns "MyClass"
だから私は、ケースクラスのフィールドのための同様の解決策を探しています。私は、ソリューションが Java リフレクションを使用しなければならないかもしれないと想像していますが、ケースクラスの基本的な実装が変更された場合、Scala の将来のリリースで壊れるかもしれないものを書くのは嫌です。
現在、私は Scala サーバーに取り組んでいて、プロトコルとそのすべてのメッセージと例外を case class を使って定義しています。しかし、私はそれらを Java マップに変換して、任意のクライアント実装が使用できるようにメッセージングレイヤーを介して送信する必要があります。私の現在の実装では、各ケースクラスの翻訳を個別に定義しているだけですが、一般化されたソリューションを見つけるのは素晴らしいことです。
どのように解決するのですか?
これは動作するはずです。
def getCCParams(cc: AnyRef) =
cc.getClass.getDeclaredFields.foldLeft(Map.empty[String, Any]) { (a, f) =>
f.setAccessible(true)
a + (f.getName -> f.get(cc))
}
関連
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】ScalaのCaseオブジェクトとEnumerationsの比較
-
[解決済み] scalaは推論される型の「許容される複雑さ」にどのような制限を設けているのでしょうか?
-
[解決済み] private[this] vs private
-
[解決済み] リスト[Option]からNoneを除外するには?
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaの定数の命名規則?
-
[解決済み] Scalaでimmutable.Mapをmutable.Mapに変換するにはどうしたらいいですか?
-
[解決済み] Scalaの場合 クラス継承
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] private[this] vs private
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaです。ScalaのコレクションにおけるTraversableとIterableの違いは何ですか?
-
[解決済み] Scalaの慣用表現「flatmap that s*** 」はどこから来たのか?
-
[解決済み] Scalaで、リストから重複を取り除くにはどうしたらいいですか?
-
[解決済み] Scalaのコレクションにenrich-my-libraryパターンを適用するにはどうしたらいいですか?
-
[解決済み] 依存性注入のためのリーダーモナド:複数の依存性、ネストされた呼び出し
-
[解決済み] Scalaの::と::の違いは何ですか?
-
[解決済み] Scalaのメソッド宣言で等号を使用するのはいつですか?
-
[解決済み] scalaのマップを反復処理するには?