复制子项中的构造函数,但不复制父项

Dav*_*vid 8 java

我有以下两个类:

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?"之类的重构?

谢谢!

Boz*_*zho 9

看看commons-beanutilsBeanUtils.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)