【问题标题】:Optimization in constructor parameters构造函数参数的优化
【发布时间】:2020-01-23 09:50:14
【问题描述】:

我将参数直接设置到 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个授权。

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

【问题讨论】:

    标签: java sonarlint


    【解决方案1】:

    使用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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 2016-03-05
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多