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

如何在Lambda表达式中抽象方法调用以消除重复代码?

Java抽取Getter方法引用复用公共逻辑实现方案

核心思路是利用Java 8+的内置函数式接口封装Getter方法逻辑,抽取出公共处理流程,不同业务方法仅需传入对应方法引用即可复用代码,具体实现分两种场景适配:


场景1:getBlah接收String类型参数

如果你的getBlah方法定义为String getBlah(String name),实现如下:

1. 抽取公共私有方法

// 入参为原始Entity和DetailData的Getter方法对应的Function
private String mapCommon(Entity entity, Function<DetailData, String> detailGetter) {
    return Optional.ofNullable(getSomething(entity))
            .map(detailData -> getBlah(detailGetter.apply(detailData)))
            .orElse(null);
}

2. 改造原有业务方法

protected String mapABC(Entity entity, @Context MappingContext mappingContext) {
    return mapCommon(entity, DetailData::getName);
}

protected String mapXYZ(Entity entity, @Context MappingContext mappingContext) {
    return mapCommon(entity, DetailData::getFirstname);
}

场景2:getBlah接收Supplier<String>类型参数

如果你的getBlah方法定义为String getBlah(Supplier<String> nameSupplier)(和你示例中传入方法引用的写法一致),实现如下:

1. 抽取公共私有方法

// 入参为原始Entity和生成Getter方法引用的Function
private String mapCommon(Entity entity, Function<DetailData, Supplier<String>> getterSupplier) {
    return Optional.ofNullable(getSomething(entity))
            .map(detailData -> getBlah(getterSupplier.apply(detailData)))
            .orElse(null);
}

2. 改造原有业务方法

protected String mapABC(Entity entity, @Context MappingContext mappingContext) {
    return mapCommon(entity, detailData -> detailData::getName);
}

protected String mapXYZ(Entity entity, @Context MappingContext mappingContext) {
    return mapCommon(entity, detailData -> detailData::getFirstname);
}

注意事项

  • Lombok生成的Getter方法名要和方法引用匹配,你的DetailData类中字段为firstname,生成的Getter是getFirstname,不要写成getFirstName避免编译报错。
  • 后续新增其他DetailData字段的映射方法时,仅需新增对应业务方法,传入对应字段的方法引用即可,无需重复编写Optional处理逻辑。

内容的提问来源于stack exchange,提问作者DerBenniAusA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:04