【问题标题】:How to bypass non-existent default arguments in Java / How to use method overloading with may fields?如何绕过 Java 中不存在的默认参数/如何将方法重载与可能的字段一起使用?
【发布时间】:2017-01-03 19:32:56
【问题描述】:

我知道 Java 中的方法没有默认参数,这可以通过使用 this 问题中的方法重载来解决。

但是,我有一个包含大约 20 个字段的类,我应该能够使用这些字段的任意组合创建该类:

import java.util.Date;

public class RequestBodyGenerator {
    private Integer length;
    private String author;
    private String title;
    private Long descriptionId;
    private Long productId;
    private Integer yearMin;
    private Integer yearMax;
    private Long publisherId;
    private String publisher;
    private String ean13;
    private String imageFilter;
    private String image;
    private Date createdFrom;
    private Date createdFromTime;
    private Date createdTo;
    private Date createdToTime;
    private Date shopSellFrom;
    private Date shopSellFromTime;
    private Date shopSellTo;
    private Date shopSellToTime;
    private Integer minPrice;
    private Integer maxPrice;
    private String moreInfo;
    private String storagePlace;
    private String creator;
    private String orderBy;
    private Boolean __checkbox_needImage;

}

这个类应该创建一个http请求的body,所以无论构造函数获取的哪个字段都会在请求body中有一个值,其他的应该是一个空字符串。可能只有一个字段,假设我在“标题”字段中给出,所有其他字段都是空的,但可能会发生我会给 10+ 字段赋值。

我的问题可以通过使用空字符串作为默认参数来解决,但这在 Java 中不起作用。如果我为每种可能的情况编写一个构造函数,我最终会编写数百个,所以这显然不是要走的路。

【问题讨论】:

  • 这就是建造者的目的。
  • 除了builder之外,您可能还想使用null object pattern来表示缺失的数值。
  • 感谢快速回答,构建器模式正是我所需要的。

标签: java overloading constructor-overloading


【解决方案1】:

使用khelwood 首次建议的build pattern 是我的问题的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多