在 Java 中处理多个构造函数的最佳方式

2022-08-31 11:11:22

我一直在想,在Java中处理多个构造函数的最佳(即最干净/最安全/最有效)的方法是什么?特别是当在一个或多个构造函数中未指定所有字段时:

public class Book
{

    private String title;
    private String isbn;

    public Book()
    {
      //nothing specified!
    }

    public Book(String title)
    {
      //only title!
    }

    ...     

}

如果未指定字段,我该怎么办?到目前为止,我一直在类中使用默认值,以便字段永远不会为空,但这是一种“好”的做事方式吗?


答案 1

稍微简化的答案:

public class Book
{
    private final String title;

    public Book(String title)
    {
      this.title = title;
    }

    public Book()
    {
      this("Default Title");
    }

    ...
}

答案 2

请考虑使用生成器模式。它允许您在参数上设置默认值,并以清晰简洁的方式进行初始化。例如:


    Book b = new Book.Builder("Catcher in the Rye").Isbn("12345")
       .Weight("5 pounds").build();

编辑:它还消除了对具有不同签名的多个构造函数的需求,并且更具可读性。