我使用抽象类在MapStruct上遇到了一些麻烦。 我有2个地图制作者:
MapperA extends AbstractMapper<U,V>
MapperB extends AbstractMapper<U,V>
MapperA使用MapperB
我在AbstractMapper
public <T extends AbstractReference> T resolveReference(String id, @TargetType Class<T> entityClass) {
// Some implementation
}
清洁安装时,我遇到了模糊的方法错误。
似乎Mapstruct找到了两次方法,每个Mapper都扩展了同一个类。
我对限定符进行了一些搜索,但是当使用具有相同签名的不同方法时,它似乎很有用。但就我而言,它是同一个!!
如果你有任何整体。
由于
编辑:
@Mapper(componentModel = "cdi", uses = {MapperB.class})
@ApplicationScoped
public abstract class MapperA extends AbstractMapper<U1,V1> {}
MapperB不使用任何其他映射器。
@Mapper(componentModel = "cdi")
@ApplicationScoped
public abstract class MapperB extends AbstractMapper<U2,V2> {}
答案 0 :(得分:1)
你实际上没有一种方法,你有两种方法。一个位于MapperA
,另一个位于MapperB
。 MapStruct不关心继承以及每个方法的位置。
也是你的方法
public <T extends AbstractReference> T resolveReference(String id, @TargetType Class<T> entityClass) {
// Some implementation
}
是一个具有相同擦除且不依赖于AbstractMapper
泛型参数的通用参数,这会导致MapStruct出现模糊的方法错误。
我不确定你在该方法中实际做了什么。但如果它是通用的,不依赖于AbstractMapper
泛型参数U
和V
,那么我建议您将此方法提取到另一个类并将该类添加到uses
注释变量。
如果方法依赖于参数,那么请确保它们是参数的一部分,然后MapStruct将正常工作,因为它们在编译期间会有不同的类型(U1, V1
或U2, V2
)