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

Mapstruct中使用@Named方法映射字段时能否仅传入部分参数?

结论:你给出的实现方式不可行

问题出在source = "."的使用上:当MapStruct映射方法包含多个参数时,"."代表的是包含所有参数的上下文对象,而你的sumThree方法需要的是三个独立的int参数,二者类型不匹配,会直接导致编译报错。

正确的实现方式

只需要去掉source = ".",MapStruct会自动根据@Named标注方法的参数名,匹配映射方法中对应的参数:

@Mapping(target = "ss", qualifiedByName = "sumThree")
Trgt map(int a, int b, int c, int x, int y, int z); 

@Named("sumThree")
static int sum(int a, int b, int c) {
    return a + b + c;
}

MapStruct生成实现类时,会自动把map方法里的a、b、c参数传入sum方法,计算结果后赋值给Trgt对象的ss字段;其余参数(x、y、z)可以正常映射到目标对象的对应字段(如果目标类有定义的话)。

补充说明

如果后续需要扩展计算逻辑,比如要用到更多参数,只需在@Named方法中添加对应参数即可,MapStruct会自动匹配同名参数:

@Named("sumThreeWithX")
static int sum(int a, int b, int c, int x) {
    return a + b + c + x;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:02:35