Как я могу создать экземпляр класса Case с аргументами конструктора без параметров в Scala?

Я делаю приложение Scala, которое устанавливает значения поля отражения. Это работает хорошо.

Однако для установки значений полей мне нужен созданный экземпляр. Если у меня есть класс с пустым конструктором, я могу легко это сделать с помощью classOf [Person] .getConstructors ....

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

Единственное, чего у меня нет, - это имена параметров из конструктора Case Class или способ создать это без параметра, а затем задать значения с помощью отражения.

Давайте перейдем к примеру.

У меня есть следующее

case class Person(name : String, age : Int)
class Dog(name : String) {
    def this() = {
        name = "Tony"
    }
}

class Reflector[O](obj : O) {

    def setValue[F](propName : String, value : F) = ...

    def getValue(propName : String) = ...
}

//This works
val dog = classOf[Dog].newInstance()
new Reflector(dog).setValue("name", "Doggy")

//This doesn't
val person = classOf[Person].newInstance //Doesn't work

val ctor = classOf[Person].getConstructors()(0)
val ctor.newInstance(parameters) //I have the property names and values, but I don't know 
// which of them is for each parameter, nor I name the name of the constructor parameters

Ответы на вопрос(4)

Ваш ответ на вопрос