簡體   English   中英

推土機是否允許從Enum轉換為Enum?

[英]Does Dozer allow converting from Enum to Enum?

2個枚舉:

enum Source {

    WINTER,
    SPRING,
    SUMMER,
    AUTUMN
}

enum Dest {

    WINTER,
    SPRING,
    SUMMER,
    AUTUMN
}

嘗試使用DozerSource轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM