Java中如何根据超类填充子类的字段?

as3*_*unt 2 java inheritance casting

我有一个基摘要类如下:

public Class Summary{
    private String name;
    private String status;
    private String id;

// Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

然后我扩展了这个类来获取客户摘要:

public Class CustomerSummary extends Summary{
    private String lastLogin;
    private String address;

// Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

现在我正在调用一个 Rest 端点,它将响应映射到 Summary 对象。然后,我需要设置调用另一个休息端点的 lastLogin 和地址,并将组合数据作为 CustomerSummary 对象返回。

Summary summary = restClient.getStatus("1234");
CustomerSummary customer = new CustomerSummary()
Run Code Online (Sandbox Code Playgroud)

如何将客户对象的所有继承字段设置为与汇总对象相同?我无法进行强制转换,因为我必须向下强制转换并且会遇到 ClassCastException。

我可能有 10 个字段,因此为摘要对象的所有字段调用客户对象的设置器将导致大量重复代码。有更聪明的方法来处理这个问题吗?

Thi*_*ilo 5

你可以创建一个“复制构造函数”

protected Summary(Summary template){
   this.name = template.name;
   // ....
}
Run Code Online (Sandbox Code Playgroud)

并从你的子类中调用它

CustomerSummary(Summary template){
    super(template);
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以做

Summary summary = restClient.getStatus("1234");
CustomerSummary customer = new CustomerSummary(summary);
Run Code Online (Sandbox Code Playgroud)