当前位置: 首页 > 知识库问答 >
问题:

Mapstruct:泛型映射

寇坚成
2023-03-14
@Mapper
public interface MyMapper<X extends Base_1, Y extends Base_2>{
    public X mapBase_2ToBase_1(Y obj);
}

我想将泛型类型<code>Y</code>的对象映射到另一个泛型类型为<code>X</code>的对象。在mapstruct中有这样的功能吗?或者我必须为通用映射编写自定义映射器吗?当我编译上面的代码时,会出现编译错误。

Caused by: java.lang.NullPointerException
    at org.mapstruct.ap.util.SpecificCompilerWorkarounds.replaceTypeElementIfNecessary(SpecificCompilerWorkarounds.java:90)
    at org.mapstruct.ap.util.Executables.getAllEnclosedExecutableElements(Executables.java:189)
    at org.mapstruct.ap.model.common.Type.getAllExecutables(Type.java:395)
    at org.mapstruct.ap.model.common.Type.getSetters(Type.java:464)
    at org.mapstruct.ap.model.common.Type.getPropertyWriteAccessors(Type.java:353)
    at org.mapstruct.ap.model.BeanMappingMethod$Builder.souceMethod(BeanMappingMethod.java:93)
    at org.mapstruct.ap.processor.MapperCreationProcessor.getMappingMethods(MapperCreationProcessor.java:345)
    at org.mapstruct.ap.processor.MapperCreationProcessor.getMapper(MapperCreationProcessor.java:143)
    at org.mapstruct.ap.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:114)
    at org.mapstruct.ap.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:73)
    at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:193)
    at org.mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:173)
    at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:154)

共有1个答案

舒飞捷
2023-03-14

我在我们的追踪器里提出了一个问题来解决NPE。但是我怀疑我们是否能为这样的映射器契约创建一个合适的实现。我们无法判断哪个类型应该被实例化为该方法的结果类型。

您以所示方式使用类型参数的理由是什么?您希望生成什么实现?

 类似资料:
  • 我有一个场景,我必须使用Mapstrt将对象(来自网络请求)转换为对象(数据层)来处理对象映射。我正在尝试创建一个通用的接口,以防止必须为每个资源定义自定义映射器,如下所示: 但这会导致构建错误(但是编译成功): 错误:(13,4)错误:无法为泛型类型变量源生成映射方法。 这不可能吗?如果没有,我将不得不为每个创建一个自定义映射器,并使用根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得

  • 试图在我的业务模型中使用值对象时,我遇到了以下代码的问题: 是否有一种通用的方法来声明(string->ValueObject)映射方法?

  • 我正在使用Spring,并且在我的项目中从mapstruct库开始,所以我有了一个想法,为@mapper(componentModel=“Spring”)创建原型注释,比如@springmapper。但它不会生成任何映射器。 是不可能还是我做错了什么?

  • 在java 8中创建新代码后,我想清除声纳问题。 我的代码: 声纳说: Lambda应该替换为方法引用。方法/构造函数引用比使用lambda更紧凑和可读性,因此是首选。同样,空检查可以替换为对Object::isNull和Object::nonNull方法的引用。 我想要更改映射(arg-