有没有一种很好的方法可以转换一个 Scala case class
实例,例如。
case class MyClass(param1: String, param2: String)
val x = MyClass("hello", "world")
变成某种映射,例如。
getCCParams(x) returns "param1" -> "hello", "param2" -> "world"
它适用于任何 case 类,而不仅仅是预定义的 case 类。我发现您可以通过编写一个方法来查询底层 Product 类,例如,将 case 类的名称提取出来。
def getCCName(caseobj: Product) = caseobj.productPrefix
getCCName(x) returns "MyClass"
因此,我正在寻找一个类似的解决方案,但案例类字段。我可以想象一个解决方案可能必须使用 Java 反射,但是我讨厌编写一些东西,因为如果 case 类的底层实现发生变化,这些东西可能会在未来的 Scala 版本中中断。
目前,我正在使用 case 类定义 Scala 服务器和协议及其所有消息和异常,因为 case 类是一个非常漂亮、简洁的结构。但是接下来我需要将它们转换成 Java 映射,以便发送消息传递层供任何客户端实现使用。我目前的实现只是分别为每个 case 类定义了一个翻译,但是如果能找到一个通用的解决方案就更好了。