Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用MapStruct映射泛型类型?_Java_Android_Generics_Mapping_Mapstruct - Fatal编程技术网

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

Java 在Android中使用MapStruct映射泛型类型?,java,android,generics,mapping,mapstruct,Java,Android,Generics,Mapping,Mapstruct,我有一个场景,其中我必须将资源对象(来自网络请求)转换为RealmObject对象(数据层),以处理对象映射。我正在尝试创建一个通用的映射器接口,以避免为每个资源定义自定义映射器,如下所示: import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import io.realm.RealmObject; import moe.banana.jsonapi2.Resource; @Mapper public inte

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

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);
}
import org.mapstruct.Mapper;
导入org.mapstruct.factory.Mappers;
导入io.realm.RealmObject;
导入moe.banana.jsonapi2.Resource;
@制图员
公共接口资源映射器{
ResourceMapper实例=Mappers.getMapper(ResourceMapper.class);
I resourceToRealm(T resource);
}
但这会导致生成错误(但是编译成功):

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


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

编辑1:

根据文件

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


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

有两个预期结果

  • 生成I类型的类(我假设这是您所期望的)——
  • 生成RealmObject类型的类,并且只映射基本方法属性和方法

  • 如果您想要第二个结果,请按照

    进行操作。对于通用类型,似乎仍处于增强阶段。链接问题是对其他内容的增强,而不是问题的内容。与第一个预期结果的链接问题不正确。这里的问题是关于其他事情的。第二个结果是正确的。如果声明了泛型映射器,则MapStruct无法知道需要使用哪些类型来生成代码。请记住,MapStruct只生成映射代码,在运行时不使用反射。我不确定MapStruct在所有可能的通用映射器组合之间生成映射是否明智。是否也要检查这个问题?