优化构造函数参数

时间:2019-09-23 10:34:32

标签: java sonarlint

我直接在DTO中设置参数,我们从HQL获得输出

以下是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个。

如何解决该警告?最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

使用Builder pattern在构造函数中获取一个参数(构建器)

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

这使用了附加的UserBuilder类,该类可以帮助我们构建具有所有必需属性和可选属性组合的所需User对象,而不会失去不变性。

例如

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

另一种选择是龙目岛的@AllArgsConstructor

  

生成一个全参数的构造函数。一个全参数的构造函数为类中的每个字段都需要一个参数。