如何简洁实现Java中Base类到UpgradedBase扩展类的转换方法?
实现方案
针对你的需求,结合Lombok特性与Java 17,可通过@SuperBuilder注解实现无需手动复制大量字段的简洁转换方法,具体如下:
1. 调整Base与UpgradedBase的Lombok注解
确保父类与子类都使用@SuperBuilder,让子类构建器能自动继承并复制父类的所有字段:
import lombok.Data; import lombok.experimental.SuperBuilder; @Data @SuperBuilder public class Base { // 你的大量不同类型字段示例 private Long id; private String name; private Double score; // ... 其他字段 } @Data @SuperBuilder public class UpgradedBase extends Base { private String metadata; }
2. 实现upgrade静态方法
直接在UpgradedBase类中添加静态转换方法,利用@SuperBuilder提供的from()方法一键复制父类实例的所有字段:
import lombok.Data; import lombok.experimental.SuperBuilder; @Data @SuperBuilder public class UpgradedBase extends Base { private String metadata; public static UpgradedBase upgrade(Base baseInstance, String metadata) { return UpgradedBase.builder() .from(baseInstance) // 自动复制Base的所有字段值 .metadata(metadata) // 设置新增的metadata字段 .build(); } }
3. 使用示例
public class Demo { public static void main(String[] args) { Base originalBase = Base.builder() .id(1001L) .name("example") .score(92.5) .build(); UpgradedBase upgraded = UpgradedBase.upgrade(originalBase, "user-imported-data"); System.out.println(upgraded.getId()); // 输出1001 System.out.println(upgraded.getMetadata()); // 输出user-imported-data } }
关键说明
@SuperBuilder是核心:它会自动生成支持父类字段复制的构建器,避免了手动为大量字段赋值的冗余代码。- 若Base类无法修改(无法添加
@SuperBuilder),可退而求其次使用Java 17的反射API或Lombok的@Getter配合Bean工具类,但前者的简洁性和性能更优。
内容的提问来源于stack exchange,提问作者tuskiomi
相关产品推荐
相关产品推荐

