以这段代码为例:
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()
,我们可以识别出有一个带有两个字符串参数的构造函数。我们还可以使用反射找到两个属性:用户名和密码。但是,在运行时,我们不知道用于调用构造函数.newInstance(?,?) 的两个参数的正确顺序。
constructor.newInstance(username , password)
,并且constructor.newInstance(password , username)
都是合法的,但结果完全不同。
我无法使用User.class.newInstance()
和设置属性值,因为无参数构造函数受到保护。
我遇到这个问题是因为我正在尝试编写一个通用的 JPA CRUD 工具。列表/读取/更新/删除都可以。但是现在我面临无法在线创建对象的问题。实体类都具有受保护的无参数构造函数(因此我不能使用 class.newInstance())和一个大量参数的公共构造函数(但参数名称在运行时被删除)。
这该怎么做 ?javassist 或其他代理技术有帮助吗?如何 ?非常感谢 !