gpt4 book ai didi

java - Mapstruct 扩展包含具有相同签名的方法的多个接口(interface)

转载 作者:行者123 更新时间:2023-12-02 19:41:27 24 4
gpt4 key购买 nike

我在我的项目中使用了 2 个库,它们需要具有不同接口(interface)的映射器:

public interface FirstLibraryMapper<T, M> {

M mapToDto(T domain);

List<M> mapToDto(List<T> domains);

}

public interface SecondLibraryMapper<T, M> {

M mapToDto(T domain);

}

我想使用 mapstruct 创建一个映射器 bean,它将通过接口(interface)注入(inject)库组件,因为两个接口(interface)都有一个具有精确签名的方法:

@Mapper
public interface MyMapper extends FirstLibraryMapper<MyDomain, MyDto>, SecondLibraryMapper<MyDomain, MyDto> {

}

当我尝试编译时,出现此错误:

Ambiguous mapping methods found for mapping collection element to MyDto: MyDto mapToDto(MyDomain arg0), MyDto mapToDto(MyDomain arg0).

我能够通过使用@Named 和@IterableMapping 来绕过这个问题,但感觉不对而且笨拙。如果 mapstruct 处理器具有与第一个方法完全相同的签名,为什么不能忽略第二个方法?我应该在他们的 github 页面上提出问题吗?还是我错了?

最佳答案

您是否考虑过在某种 Facade 模式下组合这两个映射器?

@Mapper
public interface MyFirstMapper extends FirstLibraryMapper<MyDomain, MyDto> {
}

@Mapper
public interface MySecondMapper extends SecondLibraryMapper<MyDomain, MyDto> {
}

@Service
public class MyMapperFacade extends FirstLibraryMapper<MyDomain, MyDto>, SecondLibraryMapper<MyDomain, MyDto> {

@Autowired
private MyFirstMapper firstMapper;

@Autowired
private MySecondMapper secondMapper;

@Override
public MyDto mapToDto(MyDomain domain) {
return firstMapper.mapToDto(domain); // always delegate to FirstLibraryMapper
}
}

关于java - Mapstruct 扩展包含具有相同签名的方法的多个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60073467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com