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

Mapstruct:抽象源类错误:没有名为

郜光明
2023-03-14

我有一个抽象类,我应该在DTO中使用Mapalyt映射:

@Data    
public abstract class Car {
    private String color;
}

@Data
public class ElectricCar extends Car {
    private Double batteryCapacity;
}

@Data
public class FuelCar extends Car {
    private Double engineSize;
}

@Data
public class CarDto {
    private String color;
    private Double batteryCapacity;
    private Double engineSize;
}

@Mapper
public interface CarMapper {
    @Mapping( source = "batteryCapacity", target="battery")
    @Mapping( source = "engineSize", target="engine")
    CarDto toTarget(Car source);
}

映射器将失败,错误:错误:没有名为“电池容量”的属性。

如何使这些字段成为可选字段,以便在源类中没有退出时具有默认值?

共有1个答案

令狐烨烨
2023-03-14

对于这个特定的示例,新的Subclass Map将起作用。

例如

java prettyprint-override">@Mapper
public interface CarMapper {

    @SubclassMapping( target = CarDto.class, source = FuelCar.class)
    @SubclassMapping( target = CarDto.class, source = ElectricCar.class)
    CarDto toTarget(Car source);
}

正如您所见,无需定义特定的@Mapping注释,因为MapStruct将在不同的目标类型之间创建隐式映射,并且属性将被隐式映射。

 类似资料:
  • MapperA使用MapperB 我在中有一个方法 在清洁安装时,我得到了不明确的方法错误。 MapperB不使用任何其他映射器。

  • 问题内容: 是否可以在不添加抽象方法的情况下定义抽象类? 问题答案: 当然。 声明一个类抽象仅意味着您不允许自己对其进行实例化。 声明方法抽象意味着子类必须提供该方法的实现。 这两个是单独的概念,尽管很明显,您不能在非抽象类中使用抽象方法。您甚至可以使用带有方法的抽象类,但绝不能相反。

  • 问题内容: 我现在正在学习Java,并且是Abstract的一部分。我读到一个奇怪的部分,我有一个抽象类,其中不包含任何abstarct方法。 他们为什么要使用此类课程? 问题答案: 为了防止实例化该类并将其仅用作基类。子类可以使用抽象类中定义的常规方法。 例如,创建的实例没有任何意义。但是所有车辆都可以重复使用一种通用方法。

  • 问题内容: 可以有一个 实现所有方法 的抽象类-里面没有抽象方法。 例如。: 与拥有与具体类相同的类相比,拥有这样的抽象类(如果有)有什么优势? 我能想到的是,当我将其声明为抽象时,它将不会被实例化。但是,我可以通过将其具体化并将其构造函数设为私有来达到相同的效果。 TIA。 // ================== 编辑:我能想到的另一种用途: 它可能会扩展另一个抽象类或实现一个接口,而不实现

  • 我试图创建象棋游戏,所以我为象棋工具创建抽象类(皇后,国王,车...)我还创建了king工具来检查我的代码: 并创建game_board类: 问题是,当我尝试向矩阵添加对象时,它的show me错误:1 IntelliSense:不允许抽象类类型“King”的对象:纯虚函数“chess_tool::legal_movement”没有覆盖器 ....

  • 问题内容: 这是我的代码,假设可以在按下按钮时更改一些文本:- 用下划线标记,它给我一个错误“类必须声明为抽象或实现抽象方法”。该代码大部分是从互联网上复制的,并且可以正常工作。可能仅是Android Studio错误。我如何使它工作? 问题答案: 必须实现该函数,否则您的类应该是抽象的,以便可以在某些子类中实现您的函数。但是在您的情况下,您犯了一个拼写错误。应该代替;