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

带抽象和通配符的Mapstruct

宰父淳
2023-03-14
public class EntityA {
  private List<? extends AbstractObject> objects;
}

public class EntityB {
  private List<? extends AbstractObjectDTO> dtos;
}

我有一个通用映射器:

public interface GenericMapper<X extends AbstractObjectDTO, Y extends AbstractObject> {

  Y mapDTOToEntity(X value);

  X mapEntityToDTO(Y value);
}

@Mapper
public interface ConcreteMapper extends GenericMapper<ConcreteDTO, ConcreteObject> {}

在编译时,它会生成以下错误:无法将属性“list<?extends abstractobject>objects”映射到“list<?extends abstractobject dto>dto”。考虑声明/实现一个映射方法:“list<?extends abstractobjectdto>map(list<?extends abstractobject>value)”。

当我实现map方法时,如错误中所示,我有以下错误:不能为泛型类型变量源生成映射方法。

共有1个答案

楚俊杰
2023-03-14

你可以实现你所追求的。

您需要具备以下方法:

List<AbstractObjectDto> map(List<? extends AbstractObject> value);

List<AbstractObject> mapDto(List<? extends AbstractObjectDto> value);

@ObjectFactory
default AbstractObjectDto createDto() {
    return null; // implement your own logic
}

@ObjectFactory
default AbstractObject createEntity() {
    return null; // implement your own logic
}

最重要的是MapStruct应该如何生成要映射的对象。MapStruct在编译代码的过程中生成代码,因此您需要适当地实现这些代码。

default AbstrctObjectDto map(AbstractObject value) {

    if (value instanceOf SomeObject) {
        // invoke mapping for SomeObject
    }
    //else if and more 
}
 类似资料:
  • 我正在开发一个REST API与Spring引导v2.0.0。RELEASE与mongoDB耦合。使用sping-boot-starter-data-mongob连接MongoDB im。 正在申请中。属性我可以更改与mongodb相关的基本配置,但我的问题是,当涉及高级属性时,管理这些配置的最佳方式应该是什么。例如,不能通过应用程序更改每个主机的连接属性。财产。 因此,我使用了AbstractM

  • 问题内容: 我是一名 Java 开发人员,对Object Orientation概念有很好的了解( 或者也许我这样认为 )。现在我正在学习设计模式(从头开始设计模式)。我一直在阅读有关OOPS概念抽象的文章,以简要地理解它,而阅读更多有关它的内容,使我比以前更加困惑。 据我了解,抽象是指隐藏程序的内部细节,同时将接口暴露给其他程序员,而无需担心内部细节。但是我不明白 抽象类如何适应这种抽象概念,其

  • 问题内容: 我尝试将正则表达式匹配为app.yaml中的目录名的尝试不起作用: 尽管此官方规范说正则表达式语法受支持。有办法使这项工作吗? 即应该匹配静态文件。 琐事 我使用Google App Engine服务Go Webapp。 我想最大程度地延长浏览器缓存的寿命,最大程度地减少请求数,并仍提供我的css / js / png的新版本,并且我相信修改文件名是实现此目的的最佳实践。另外,由于添加

  • 问题内容: 为什么这样做: 虽然这会产生类型不匹配错误: 为什么是这样?是否有办法解决此问题,而不使用原始类型? 问题答案: 尝试 注意:请注意,当您使用类似List的集合时,您只能在“只读”模式下使用它(添加空值除外)。

  • 类型参数T不应由最终的类型整数限定。不能进一步扩展Final类型 为什么使用final类型作为通配符的上限完全可以,但对类型参数抛出警告?为什么Java甚至允许通配符被最终的上层类型所约束?

  • 问题内容: 和MySQL中的通配符有什么区别? 在这样的查询中: 问题答案: 只能在全文搜索中用作通配符(或截断),而(匹配0个或更多字符)和(恰好匹配一个字符)仅适用于LIKE查询。