簡體   English   中英

構造函數參數的優化

[英]Optimization in constructor parameters

我將參數直接設置到 DTO 中,我們從 HQL 獲得 output

以下是 HQL:

@Query(value = "SELECT new com.test.vos.CustomerDetails(firstname, lastName, address1, address2, address3, id, companyName, companyAddress, otherDetails) "
            + "FROM MstCustomer mc "
            + "INNER JOIN mc.mstAddress md "
            + "INNER JOIN mc.MstCompany mComapny "
            + "WHERE mc.mobileNo = :mobileNo ")
public List<CustomerDetails> getCustomerDetails(@Param("mobileNo") Integer mobileNo);

DTO:

public class CustomerDetails {
    private String firstName;
    private String lastName;
    private String address1;
    private String address2;
    private String address3;
    private String id;
    private String companyName;
    private String companyAddress;
    privatr String otherDetails;

    public CustomerDetails(String firstName, String lastName, String address1, String address2, String address3, String id, String companyName, String companyAddress, String otherDetails) {
        super();
        this.firstName = storeCode;
        this.lastName = lastName;
        this.address1 = address1;
        this.address2 = address2;
        this.address3 = address3;
        this.id = id;
        this.companyName = companyName;
        this.companyAddress = companyAddress;
        this.otherDetails = otherDetails;
    }

    // Getter and Setter
}

最重要的是,代碼運行良好,唯一的問題是它顯示的構造函數有 9 個參數,大於 7 個授權。

如何解決該警告? 什么是最好的方法?

使用Builder 模式在構造函數中獲取一個參數(builder)

 private CustomerDetails(CustomerDetailsBuilder builder) {
    // ... set all fields using builder
 public static class CustomerDetailsBuilder
    //...update all parameters and build method

這使用了一個額外的 class UserBuilder,它幫助我們構建所需的用戶 object,其中包含所有必需屬性和可選屬性的組合,而不會失去不變性。

例如

CustomerDetails customerDetails = new CustomerDetails.CustomerDetailsBuilder("Lokesh", "Gupta")
.address1("street 1")
.address2("Floor 2")
.address3("Fake address 1234")
.build();

另一種選擇是龍目島的@AllArgsConstructor

生成一個全參數構造函數。 全參數構造函數需要 class 中的每個字段都有一個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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