Возьмите этот код, например:
public class User {
private String username;
private String password;
protected User()
{}
public User(String username , String password)
{...}
//getters & setters
}
Мы можем использовать User.class.getConstructors()
и обнаружить, что есть 2 конструктора, а с помощью constructor.getParameterTypes()
мы можем идентифицировать один конструктор с двумя параметрами String.
Мы также можем использовать отражение, чтобы найти два свойства: имя пользователя и пароль.
Но во время выполнения мы не знаем правильную последовательность двух параметров, используемых для вызова constructor.newInstance (?,?).
constructor.newInstance(username , password)
и constructor.newInstance(password , username)
допустимы, но имеют совершенно разные результаты.
Я не могу использовать User.class.newInstance()
и установить значение свойства, поскольку конструктор без аргументов защищен.
Я столкнулся с этой проблемой, потому что я пытаюсь написать универсальный инструмент JPA CRUD. Список / Читать / Обновить / Удалить в порядке. Но теперь я сталкиваюсь с проблемой, что я не могу онлайн создать объект. Все классы сущностей имеют защищенный конструктор без аргументов (поэтому я не могу использовать class.newInstance ()) и один открытый конструктор с множеством параметров (но имена параметров стираются во время выполнения).
Как это сделать? Помогают ли javassist или другие прокси-техники? как ?
Большое спасибо!