Я использую в своем проекте 2 библиотеки, для которых требуются сопоставители с различными интерфейсами:
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, который будет внедряться в компоненты библиотеки через интерфейс, поскольку оба интерфейса имеют метод с точной подписью:
@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? Или я не прав в этом случае?