в Scala, у меня есть ситуация, когда базовый класс / черта расширяется очень многими дочерними классами.я собираюсь сериализовать экземпляр дочернего класса (с целью его реконструкции позже), получив имя класса и аргументы, используемые для создания экземпляра класса.легко получить имя экземпляра класса, используя отражение, но я не уверен, как получить аргументы экземпляра таким образом, чтобы не требовалось писать код в каждом дочернем классе.это должно также работать для аргументов, названных по имени.это кажется хитрым, потому что у каждого дочернего класса может быть совершенно разное число и тип аргументов конструктора:
abstract class Base {
// ideally implements some way of finding out the arguments used to construct this object
def getArgs = {...}
}
class ChildA() // args would be a 0-tuple
class ChildB(arg1: Int) // getArgs would be a 1-tuple of arg1
class ChildC(arg1: Double, arg2: Boolean) // args would be a 2-tuple of (arg1, arg2)
// etc...
Чего я хочу избежать, так это чтобы каждый класс реализовывал метод, такой как "getArgs", и просто возвращал дубликат кортежа.аргументы от конструктора.Любой способ сделать это?
Я понимаю, что альтернативный подход заключается в том, чтобы иметь какой-то перехватчик для создания объекта, но я не мог понять, как это сделать без необходимости писать шаблонный код для каждого дочернего класса какхорошо.
edit: подход с классом case элегантен, но в моей ситуации не подходит, потому что мы должны иметь возможность разрешить конкретным дочерним классам расширять другие конкретные дочерние классы.