[英]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.