Java Mapstruct映射器菱形继承,方法已定义
我有以下情况,我简化了我的实际案例,并创建了显示我的案例的最小示例: 两个空的、在本例中不相关的类,classessJava Mapstruct映射器菱形继承,方法已定义,java,inheritance,java-11,mapstruct,Java,Inheritance,Java 11,Mapstruct,我有以下情况,我简化了我的实际案例,并创建了显示我的案例的最小示例: 两个空的、在本例中不相关的类,classessPhone和PhoneDto,以及映射器继承结构,TestSuperMapper,其中一个方法声明将PhoneDto映射到Phone,两个空接口TestParent1Mapper和TestParent2Mapper都在扩展testsuperapper,一个实际的映射器接口TestMapper注释为@mapper扩展了TestParent1Mapper和TestParent2Map
Phone
和PhoneDto
,以及映射器继承结构,TestSuperMapper
,其中一个方法声明将PhoneDto
映射到Phone
,两个空接口TestParent1Mapper
和TestParent2Mapper
都在扩展testsuperapper
,一个实际的映射器接口TestMapper
注释为@mapper
扩展了TestParent1Mapper
和TestParent2Mapper
,和TestMapperImpl
类实现由mapstruct生成的TestMapper
。此设置的问题在于,mapstruct生成具有以下内容的TestMapperImpl
:
import javax.annotation.processing.Generated;
@Generated(...)
public class TestMapperImpl implements TestMapper {
@Override
public Phone map(PhoneDto phoneDto) {
if ( phoneDto == null ) {
return null;
}
Phone phone = new Phone();
return phone;
}
@Override
public Phone map(PhoneDto phoneDto) {
if ( phoneDto == null ) {
return null;
}
Phone phone = new Phone();
return phone;
}
}
所以它不会完成,因为方法
Phone map(PhoneDto)
声明了两次,一个是通过TestParent1Mapper
继承路径来的,第二个是通过TestParent2Mapper
来的。有没有可能在不改变继承结构的情况下避免这种情况?Mapstruct版本1.4.1.Final,jdk 11。实际的javac异常是java:method-map(PhoneDto)已经在类TestMapperImpl中定义。
原来是mapstruct问题,我已经创建并发布了mapstruct,mapstruct的维护人员已经修复了它:看起来像是mapstruct中的一个bug(类似于)。最好通过在中创建记录单来征求建议/打开错误报告。