Conveniently map between enum and int / String

前端 未结 18 1818
陌清茗
陌清茗 2020-11-28 01:07

When working with variables/parameters that can only take a finite number of values, I try to always use Java\'s enum, as in

public enum BonusT         


        
18条回答
  •  余生分开走
    2020-11-28 01:11

    If you have a class Car

    public class Car {
        private Color externalColor;
    }
    

    And the property Color is a class

    @Data
    public class Color {
        private Integer id;
        private String name;
    }
    

    And you want to convert Color to an Enum

    public class CarDTO {
        private ColorEnum externalColor;
    }
    

    Simply add a method in Color class to convert Color in ColorEnum

    @Data
    public class Color {
        private Integer id;
        private String name;
    
        public ColorEnum getEnum(){
            ColorEnum.getById(id);
        }
    }
    

    and inside ColorEnum implements the method getById()

    public enum ColorEnum {
    ...
        public static ColorEnum getById(int id) {
            for(ColorEnum e : values()) {
                if(e.id==id) 
                    return e;
            }
        }
    }
    

    Now you can use a classMap

    private MapperFactory factory = new DefaultMapperFactory.Builder().build();
    ...
    factory.classMap(Car.class, CarDTO.class)
        .fieldAToB("externalColor.enum","externalColor")
        .byDefault()
        .register();
    ...
    CarDTO dto = mapper.map(car, CarDTO.class);
    

提交回复
热议问题