You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简洁实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:35:59