2017-05-04 89 views
0

2枚举:Dozer是否允许从Enum转换为Enum?

enum Source { 

    WINTER, 
    SPRING, 
    SUMMER, 
    AUTUMN 
} 

enum Dest { 

    WINTER, 
    SPRING, 
    SUMMER, 
    AUTUMN 
} 

试图Source转换为DestDozer

DozerBeanMapper mapper = new DozerBeanMapper(); 

mapper.map(Source.WINTER, Dest.class); 

异常线程 “main” org.dozer.MappingException: java.lang.NoSuchMethodE xception:Dest。 < init>()

但是当我试图转换包含上面提到的枚举的复杂对象时,Dozer成功地转换了它。

那么,为什么Dozer不能将Enum转换为Enum,因为它们不是复杂对象的属性?

回答

1

推土机无法映射枚举,因为它依赖于缺省无参数公共构造函数的存在。只有当它们是较大的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);