Mapstruct extiende múltiples interfaces que contienen método con la misma firma

Pashchenko Denis:

Yo uso 2 bibliotecas en mi proyecto que requieren creadores de mapas con las diferentes interfaces:

public interface FirstLibraryMapper<T, M> {

    M mapToDto(T domain);

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

}

public interface SecondLibraryMapper<T, M> {

    M mapToDto(T domain);

}

Quiero crear un solo grano de asignador usando mapstruct que se inyecta en los componentes de las bibliotecas de interfaz, ya que ambas tienen un método con la firma exacta:

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

}

Cuando intento compilar, obtengo este error:

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

Yo era capaz de evitar este problema utilizando @Named y @IterableMapping pero se siente mal y torpe. ¿Por qué no se puede ignorar el procesador mapstruct el segundo método si tiene una firma exacta como la primera? Debería elevarse un problema en su página de GitHub? O estoy mal en ese caso?

Pashchenko Denis:

Problema resuelto reemplazando método en el resultado asignador de que sigue siendo un torpe poco, pero parece hacer el truco.

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

    @Override
    MyDto mapToDto(MyDomain domain);

}

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=478289&siteId=1
Recomendado
Clasificación