case class
Scalaインスタンスを変換できる良い方法はありますか?
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 サーバーに取り組んでおり、ケース クラスを使用してプロトコルとそのすべてのメッセージと例外を定義しています。しかし、これらを Java マップに変換して、クライアント実装で使用できるようにメッセージング レイヤーを介して送信する必要があります。私の現在の実装では、各ケース クラスの翻訳を個別に定義しているだけですが、一般化された解決策を見つけられるとよいでしょう。