我有一个场景,我必须使用MapStruct将Resource
个对象(来自网络请求)转换为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)错误:无法为泛型类型生成映射方法 变量来源。
这不可能吗?如果没有,我将不得不为每个Resource
创建一个自定义映射器,并使用switch
告诉反序列化器哪个映射器基于类类型等使用...它可能会变得丑陋而不是导致非常干的代码。他们的documentation对此并不十分清楚。
答案 0 :(得分:1)
编辑1:
来自文档,
生成的实现使用普通的Java方法调用来在源对象和目标对象之间进行映射,即不涉及反射。默认情况下,如果属性在源和目标中具有相同的名称,则会对其进行映射,但是可以使用@Mapping和一些其他注释来控制这个和许多其他方面。
我怀疑这种映射器合同是否可行。 我们无法确定哪种类型会被实例化为此自动生成的结果。
有两种预期结果
如果您想要第二个结果,请按照this
进行操作