Проблема в том, что в Java невозможно получить имена параметров конструктора.
Для этого конкретного примера вам понадобится конструктор по умолчанию, с помощью которого вы можете создать пустой объект.
public GivenClass() {
super();
}
Затем вы можете использовать отражение, чтобы получить поля класса, а затем установить для них соответствующее значение.
Но я думаю, что было бы намного проще аннотировать ваш конструктор, а затем извлекать информацию аннотаций в вашем deserialize
методе. В этом случае вам не нужно извлекать поля и создавать пустой конструктор.
Пример:
Вам нужно создать аннотацию, подобную этой:
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Property
{
String value();
}
И тогда вы можете использовать его в своем конструкторе следующим образом:
public GivenClass(@Property("name") String name, @Property("location") String location, @Property("age") Integer age) {
// ...
}