如何使用枚举 VO 对象设置枚举 DTO 对象?
How to set enum DTO object using enum VO object?
如何将一个对象转换为另一个对象?例如,我有 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;
}
}
你可以在工厂方法中做不同引擎枚举之间的映射:
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
类型转换为另一种类型,然后在工厂方法中使用它。
...当然,您当然可以采用引入映射器库或其他更强大的东西的其他答案。我只是想告诉你,你尝试直接做的事情是可行的。
CarDTO
和 Car
看起来像 数据传输对象 和 模型,例如带有 Hybernate 注释。这些 classes lools 大多相似,但不能互相使用。
要将一种转换为另一种,您有多种选择:
- 通过将所有字段从一个 class 复制到另一个
创建您自己的转换器
- MapStruct是你的朋友! - 使用 MapStruct 功能相同但代码更少。
如何将一个对象转换为另一个对象?例如,我有 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;
}
}
你可以在工厂方法中做不同引擎枚举之间的映射:
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
类型转换为另一种类型,然后在工厂方法中使用它。
...当然,您当然可以采用引入映射器库或其他更强大的东西的其他答案。我只是想告诉你,你尝试直接做的事情是可行的。
CarDTO
和 Car
看起来像 数据传输对象 和 模型,例如带有 Hybernate 注释。这些 classes lools 大多相似,但不能互相使用。
要将一种转换为另一种,您有多种选择:
- 通过将所有字段从一个 class 复制到另一个 创建您自己的转换器
- MapStruct是你的朋友! - 使用 MapStruct 功能相同但代码更少。