Рассмотрим следующий класс и метод:
case class User(id: Long, name: String) {
private var foo = "Foo" // shouldn't be printed
val bar = "bar" // also shouldn't be printed
}
case class Message(id: Long, userId: Long, text: String)
def printInfo[E](o: E)(implicit tt: TypeTag[E]) = {
}
Я хочу, чтобы этот метод печатал имя, тип и значение для каждого поля для любого класса case, т.е.
printInfo(User(1, "usr1")) // prints something like "(id, Long, 1), (name, String)"
printInfo(Message(1, 1, "Hello World")) // prints "(id, Long, 1), (userId, Long, 1), (text, String, "Hello World")"
Добавление некоторых пользовательских аннотаций для полей также значительно.