Доступ ко всем значениям класса дел без отражения - PullRequest
1 голос
/ 14 апреля 2020

У меня есть класс дел, и у меня есть сценарий, в котором я хочу получить все значения поля класса дел в строке, разделенные - и, если значение отсутствует в классе дел, используйте пустую строку в этом случае. Я могу чтобы сделать это, но с помощью отражения, есть ли другой способ сделать это без отражения?

case class Test(
               a: String,
               b: Int
               )


val test = Test( a = "aValue",
                 b = 1
               ) 

val result = test.getClass.getDeclaredFields
                .map { field =>
                  field.setAccessible(true)
                  Option(field.get(test)).getOrElse("")
                }
                .mkString("-")

aValue-1 будет результатом

1 Ответ

3 голосов
/ 14 апреля 2020

Вы можете использовать productIterator метод все классы дел , сопровождаемые mkString.

test.productIterator.map(v => Option(v).fold(ifEmpty = "")(_.toString)).mkString("-")

(кстати, это не пахнет хорошо, возможность null на классе дел - плохая практика, и это похоже на очень рустичный c способ кодирования данных) .

...