Чи є хороший спосіб перетворити 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. Я вважаю, що рішення, можливо, має використовувати відображення Java, але я не хочу писати щось, що може зламатися в майбутньому випуску Scala, якщо основна реалізація класів кейсів зміниться.
В даний час я працюю на сервері Scala та визначаю протокол та всі його повідомлення та винятки, використовуючи класи case, оскільки вони є такою красивою, стислою конструкцією для цього. Але тоді мені потрібно перевести їх на карту Java, щоб переслати рівень обміну повідомленнями для використання будь-якою реалізацією клієнта. Моя поточна реалізація просто визначає переклад для кожного класу випадку окремо, але було б непогано знайти узагальнене рішення.