Java 推土机是否允许从枚举转换为枚举?
2个枚举:Java 推土机是否允许从枚举转换为枚举?,java,enums,dozer,Java,Enums,Dozer,2个枚举: enum Source { WINTER, SPRING, SUMMER, AUTUMN } 及 试图使用推土铲将源转换为目标: DozerBeanMapper mapper = new DozerBeanMapper(); mapper.map(Source.WINTER, Dest.class); 线程“main”org.dozer.MappingException中的异常: java.lang.NoSuchMethodException:
enum Source {
WINTER,
SPRING,
SUMMER,
AUTUMN
}
及
试图使用推土铲将源
转换为目标
:
DozerBeanMapper mapper = new DozerBeanMapper();
mapper.map(Source.WINTER, Dest.class);
线程“main”org.dozer.MappingException中的异常:
java.lang.NoSuchMethodException:Dest.那么,当枚举不是复杂对象的属性时,为什么Dozer不能将其转换为枚举呢?Dozer无法映射枚举,因为它依赖于默认无参数公共构造函数的存在。只有当它们是较大POJO的一部分时,才能对其进行映射。例如:
enum Source {
WINTER,
SPRING,
SUMMER,
AUTUMN
}
public class SourceClass{
private Source season;
public Source getSeason() {
return season;
}
public void setSeason(Source season) {
this.season = season;
}
}
及
现在这将起作用:
SourceClass source = new SourceClass();
source.setSeason(Source.AUTUMN);
DestClass dest = mapper.map(source, DestClass.class);
作为替代方案,如果您的枚举共享相同的命名,您可以执行以下操作:
Dest mapped = Dest.valueOf(Source.WINTER.toString);
但是请注意,您将失去类型安全性,并且如果重命名任何一个枚举项,编译器将不会警告您
SourceClass source = new SourceClass();
source.setSeason(Source.AUTUMN);
DestClass dest = mapper.map(source, DestClass.class);
Dest mapped = Dest.valueOf(Source.WINTER.toString);