[英]Does Dozer allow converting from Enum to Enum?
2个枚举:
enum Source {
WINTER,
SPRING,
SUMMER,
AUTUMN
}
和
enum Dest {
WINTER,
SPRING,
SUMMER,
AUTUMN
}
尝试使用Dozer
将Source
转换为Dest
:
DozerBeanMapper mapper = new DozerBeanMapper();
mapper.map(Source.WINTER, Dest.class);
线程“main”中的异常org.dozer.MappingException:java.lang.NoSuchMethodException:Dest。<init>()
但是当我尝试转换包含上述枚举的复杂对象时,Dozer成功转换了它。
那么,为什么当Dozer不是复杂对象的属性时,Dozer不能将Enum转换为Enum?
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;
}
}
和
enum Dest {
WINTER,
SPRING,
SUMMER,
AUTUMN
}
public class DestClass{
private Dest season;
public Dest getSeason() {
return season;
}
public void setSeason(Dest 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);
但请注意,如果重命名了任一枚举条目,则会丢失类型安全性并且编译器不会发出警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.