【问题标题】:Java generify DTO classesJava 生成 DTO 类
【发布时间】:2017-06-26 12:11:15
【问题描述】:

我有三个类,其中两个扩展了它们看起来像这样的基类:

public class AllowanceDTO extends BaseExpenseDTO {
    private String flight;
}

public class CarTravelDTO extends BaseExpenseDTO {
    private Double tripLength;
}

public class BaseExpenseDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private int count = 0;
    private BigDecimal amount;
    private String typeName;
}

这些 dto 是 TravelItemDTO 的一部分

public class TravelItemDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String startDate;
    private String endDate;
    private List<BaseExpenseDTO> expenseCompensations;
    private List<AllowanceDTO> allowanceCompensations;
    private List<CarTravelDTO> mileageCompensations;
}

我如何生成这些 dto 的?例如,我不会有三个列表而是一个列表,因为一个 TravelItemDTO 只能有一个类型补偿列表。

【问题讨论】:

    标签: java inheritance refactoring dto


    【解决方案1】:

    假设我正确理解了您的问题,您可以生成TravelItemDTO

    public class TravelItemDTO<T extends BaseExpenseDTO> implements Serializable {
        private static final long serialVersionUID = 1L;
        private String startDate;
        private String endDate;
        private List<T> compensations;
    }
    

    然后使用它,例如:

    TravelItemDTO<CarTravelDTO> carTravelItem = new TravelItemDTO<CatTravelItem>();
    ...
    

    HTH。

    【讨论】:

      【解决方案2】:

      你可以使用通配符:

      public class TravelItemDTO implements Serializable {
          private List<? extends BaseExpenseDTO> compensations;
      //...
      }
      

      例子:

      TravelItemDTO dto = new TravelItemDTO();
      dto.setCompensations(new ArrayList<AllowanceDTO>());
      

      【讨论】:

      • 此提案有效,但不满足“一个TravelItemDTO只能有一个类型的补偿列表”的要求。这样,补偿列表可以存储BaseExpenseDTO 的任何子类型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2012-07-18
      • 2013-05-15
      • 1970-01-01
      • 2019-08-05
      • 2012-04-21
      • 2013-03-08
      相关资源
      最近更新 更多