我有以下两个类:
public class User {
public Integer userId;
// ...another 50-60 fields
}
public class SuperUser extends User {
}
我想在SuperUser中有一个构造函数,该构造函数接受User类型的对象并创建SuperUser类型的对象。例如:
public SuperUser(User theUser) {
// not legal -> but I am looking for a one-liner to initialize this with values from theUser
this = theUser;
}
如果User对象缺少构造函数User(User existingUser),是否有任何自动方法可以使用现有用户对象中的所有字段来初始化SuperUser对象?我正在尝试避免以下50行:
public SuperUser(User theUser) {
this.firstName = theUser.getFirstName();
this.lastName = theUser.getLastName();
// and so on....
}
如果无法做到这一点,那么是否存在诸如“创建副本构造函数”之类的重构?
谢谢!
最佳答案
看一看commons-beanutils的 BeanUtils.copyProperties(..)
:
SuperUser superUser = new SuperUser();
BeanUtils.copyProperties(superUser, originalUser);
或者,您可以将其放置在复制构造函数中:
public SuperUser(User originalUser) {
BeanUtils.copyProperties(this, originalUser);
}