检查构造函数中的List时的正确练习

时间:2017-03-16 17:56:37

标签: java exception methods constructor

我有以下Book类(我省略了不相关的代码)。

public final class Book {

    public Book(String bookTitle, List<Author> listofAuthors, int numberofchapters, String ISBN) 
    { 
      //Ommitted other variable initializations. 
      this.checkAuthors(listofAuthors);
      this.listofAuthors = Collections.unmodifiableList(new ArrayList<Author>(listofAuthors));          
    }

    private void checkAuthors(List<Author> checkifEmpty)
    {   
       if(checkifEmpty == null){
         throw new IllegalArgumentException( "List of authors is null");
       }

       if (checkifEmpty.size() == 0){
          throw new IllegalArgumentException( "The authors list contains no authors");
       }

       for (Author checkEmpty : checkifEmpty){
          if(checkEmpty == null){
            throw new IllegalArgumentException("A book must have at least one author");
        }
    }

}

我添加了一个私有方法来检查作者的List,以确保List集合不是0,并防止

Author bookAuthor = null;

List<Author> listofAuthors = new ArrayList<Author>();
listofAuthors.add(bookAuthor); 

List<Author> listofAuthors = null;
Book tlac = new Book("book title goes here", listofAuthors, 30, "isbn goes here");

发生。

问题:

  1. private调用constructor方法并在那里做了一些不好的做法?如果是这样,我该如何纠正呢?

  2. private方法checkAuthors中,我使用== instead of equals()。我的目的是检查List<Author>中存储的对象的值是否为null。在这种情况下,我发现使用==有效,如果我使用equals()它会给我null作为错误消息。在这种情况下使用==是否正确,如果没有,我应该做什么?

1 个答案:

答案 0 :(得分:0)

  

从构造函数调用一个私有方法,并且正在做的工作被认为是不好的做法吗?如果是这样,我该如何纠正呢?

不,只要有意义就行,即降低单个方法的复杂性或DRYs代码。

  

在私有方法checkAuthors中,我使用==而不是equals()。我的目的是检查列表中存储的对象是否具有null值。是这种情况,我发现使用==工作,如果我使用equals()它给我null作为错误消息。在这种情况下使用==更正,如果没有,我应该做什么?

取决于您的对象的专业程度。如果这是在您的应用程序中的多个位置使用的关键状态检查,那么快速构建失败是一个好主意。考虑使用像Guava&#39; preconditions这样的东西来节省一些打字。