首页 > 解决方案 > 如何使用枚举 VO 对象设置枚举 DTO 对象?

问题描述

如何将一个对象转换为另一个对象?例如,我有 3 个类 Car(等于 CarVO)、CarDTO 和 CarFactory。问题在于我无法通过 Car 的对象设置 CarDTO 的对象。我应该将其转换为字符串还是什么?我将不胜感激任何帮助!

public class Car {
    private Long id;
    private String model;
    private Engine engine;
    private Integer manufacturedYear;

    private enum Engine {Petrol, Diesel, Gas}

    // Constructor, setters & getters

}

public class CarDTO {
    private Long id;
    private String model;
    private Engine engine;
    private Integer manufacturedYear;

    private enum Engine {Pertol, Diesel, Gas}

    // Constructor, setters & getters

}

public enum CarFactory {
    INSTANCE;

    CarFactory() {}

    public static CarFactory getInstance() {return INSTANCE;}

    public CarDTO createCarDTO(Car car) {
        CarDTO carDTO = new CarDTO();
        carDTO.setId(car.getId());
        carDTO.setModel(car.getModel());
        carDTO.setEngine(car.getEngine()); // Here is an issue 
        carDTO.setManufacturedYear(car.getManufacturedYear());
        return carDTO;
    }
}

标签: javadto

解决方案


您可以在工厂方法中进行不同引擎枚举之间的映射:

public CarDTO createCarDTO(Car car) {
    CarDTO carDTO = new CarDTO();
    carDTO.setId(car.getId());
    carDTO.setModel(car.getModel());
    switch (car.getEngine()) {
        case Diesel:
            carDTO.setEngine(CarDTO.Engine.Diesel);
        case Gas:
            carDTO.setEngine(CarDTO.Engine.Gas);
        case Petrol:
            carDTO.setEngine(CarDTO.Engine.Pertol);
    }
    carDTO.setManufacturedYear(car.getManufacturedYear());
    return carDTO;
}

请注意,我必须将两个 Engine 枚举的可见性更改为包范围才能执行此操作。

一种更简洁、更可重用的方法是编写一个单独的方法,将一种Engine类型转换为另一种类型,然后在工厂方法中使用它。

...当然,您当然可以采用其他方法来引入映射器库或其他更强大的东西。我只是想告诉你,你试图直接做的事情是可行的。


推荐阅读