我有以下两个类:
public class User {
public Integer userId;
// ...another 50-60 fields
}
public class SuperUser extends User {
}
Run Code Online (Sandbox Code Playgroud)
我想在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;
}
Run Code Online (Sandbox Code Playgroud)
如果User对象缺少构造函数User(User existingUser),是否有任何自动方法使用现有用户对象中的所有字段初始化SuperUser对象?我试图避免50行:
public SuperUser(User theUser) {
this.firstName = theUser.getFirstName();
this.lastName = theUser.getLastName();
// and so on....
}
Run Code Online (Sandbox Code Playgroud)
如果无法做到这一点,是否存在"Create Copy Constructor?"之类的重构?
谢谢!
看看commons-beanutils的BeanUtils.copyProperties(..)
:
SuperUser superUser = new SuperUser();
BeanUtils.copyProperties(superUser, originalUser);
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其放在copy-constructor中:
public SuperUser(User originalUser) {
BeanUtils.copyProperties(this, originalUser);
}
Run Code Online (Sandbox Code Playgroud)