MapStruct:抽象类的麻烦

时间:2017-02-01 11:12:16

标签: java class abstract mapstruct

我使用抽象类在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> {}

1 个答案:

答案 0 :(得分:1)

你实际上没有一种方法,你有两种方法。一个位于MapperA,另一个位于MapperB。 MapStruct不关心继承以及每个方法的位置。

也是你的方法

public <T extends AbstractReference> T resolveReference(String id, @TargetType Class<T> entityClass) {
    // Some implementation
}

是一个具有相同擦除且不依赖于AbstractMapper泛型参数的通用参数,这会导致MapStruct出现模糊的方法错误。

我不确定你在该方法中实际做了什么。但如果它是通用的,不依赖于AbstractMapper泛型参数UV,那么我建议您将此方法提取到另一个类并将该类添加到uses注释变量。

如果方法依赖于参数,那么请确保它们是参数的一部分,然后MapStruct将正常工作,因为它们在编译期间会有不同的类型(U1, V1U2, V2