有没有一种简便的方法可以将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"
我在寻找一个类似的解决方案,但是针对case class字段。我想这个解决方案可能需要使用Java反射,但如果case classes的底层实现发生更改,我不希望编写的代码在Scala未来版本中出现问题。
目前,我正在开发一个Scala服务器,并使用case classes定义协议及其所有消息和异常,因为它们非常适合这种美丽且简洁的结构。但是,我需要将它们转换成Java映射以便于发送给任何客户端实现的消息传输层。我的当前实现只是分别为每个case class定义了一个翻译,但是找到一个通用的解决方案会很好。