Có cách nào tốt để tôi có thể chuyển đổi một phiên bản Scala không case class
, ví dụ:
case class MyClass(param1: String, param2: String)
val x = MyClass("hello", "world")
thành một ánh xạ của một số loại, ví dụ:
getCCParams(x) returns "param1" -> "hello", "param2" -> "world"
Nó hoạt động cho bất kỳ lớp trường hợp nào, không chỉ những lớp được xác định trước. Tôi thấy rằng bạn có thể kéo tên lớp trường hợp ra bằng cách viết một phương thức thẩm vấn lớp Sản phẩm bên dưới, ví dụ:
def getCCName(caseobj: Product) = caseobj.productPrefix
getCCName(x) returns "MyClass"
Vì vậy, tôi đang tìm kiếm một giải pháp tương tự nhưng cho các trường lớp trường hợp. Tôi đã tưởng tượng một giải pháp có thể phải sử dụng phản chiếu Java, nhưng tôi không muốn viết thứ gì đó có thể bị hỏng trong bản phát hành Scala trong tương lai nếu việc triển khai cơ bản của các lớp trường hợp thay đổi.
Hiện tại tôi đang làm việc trên máy chủ Scala và xác định giao thức cũng như tất cả các thông báo và ngoại lệ của nó bằng cách sử dụng các lớp trường hợp, vì chúng là một cấu trúc ngắn gọn, đẹp đẽ cho việc này. Nhưng sau đó tôi cần phải dịch chúng thành một bản đồ Java để gửi qua lớp nhắn tin cho bất kỳ triển khai máy khách nào sử dụng. Việc triển khai hiện tại của tôi chỉ xác định một bản dịch cho từng lớp trường hợp riêng biệt, nhưng sẽ rất tốt nếu bạn tìm thấy một giải pháp tổng quát.