Возьмите этот код, например:Constructor.newInstance() без знания последовательности параметров?
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()
и установить значение свойства, потому что конструктор no-arg защищен.
У меня возникла эта проблема, потому что я пытаюсь написать общий инструмент JPA CRUD. Список/Чтение/Обновление/Удалить в порядке. Но теперь я сталкиваюсь с проблемой, которую я не могу создать в Интернете. Все классы сущностей имеют защищенный конструктор no-arg (поэтому я не могу использовать class.newInstance()) и один открытый конструктор a-lot-of-parameter (но имена параметров стираются во время выполнения).
Как это сделать? Помогает ли javassist или другие методы-посредники? как ? Спасибо большое!
Ничего себе, спасибо, что сообщили мне, что я могу модифицировать защиту для общественности. Я не знал, что JVM разрешает это раньше. – smallufo 2010-12-16 15:06:42