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

在Android中使用MapStruct映射泛型类型?

寿飞飙
2023-03-14

我有一个场景,我必须使用Mapstrt将资源对象(来自网络请求)转换为RealmObject对象(数据层)来处理对象映射。我正在尝试创建一个通用的Mapper接口,以防止必须为每个资源定义自定义映射器,如下所示:

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import io.realm.RealmObject;
import moe.banana.jsonapi2.Resource;

@Mapper
public interface ResourceMapper <T extends Resource, I extends RealmObject> {
    ResourceMapper INSTANCE = Mappers.getMapper(ResourceMapper.class);

    I resourceToRealm(T resource);
}

但这会导致构建错误(但是编译成功):

错误:(13,4)错误:无法为泛型类型变量源生成映射方法。

这不可能吗?如果没有,我将不得不为每个资源创建一个自定义映射器,并使用开关根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得丑陋,不会产生非常枯燥的代码。他们的文件对此不是很清楚。

共有1个答案

彭允晨
2023-03-14

编辑1:

从文档,

生成的实现使用普通Java方法调用在源对象和目标对象之间进行映射,即不涉及反射。默认情况下,如果属性在源和目标中具有相同的名称,则会对其进行映射,但可以使用@Mapping和一些其他注释来控制这一点和许多其他方面。

我怀疑是否有可能签订这样的地图绘制合同。我们无法判断自动生成的结果将实例化哪种类型。

有两个预期结果

  1. 生成类型I的类(我假设这是您所期望的)-目前不可能
  2. 生成RealmObject类型的类,并且只映射基本方法属性和方法

如果你想得到第二个结果,请按照以下步骤进行

 类似资料: