我有以下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");
发生。
问题:
从private
调用constructor
方法并在那里做了一些不好的做法?如果是这样,我该如何纠正呢?
在private
方法checkAuthors
中,我使用==
instead of equals()
。我的目的是检查List<Author>
中存储的对象的值是否为null
。在这种情况下,我发现使用==
有效,如果我使用equals()
它会给我null
作为错误消息。在这种情况下使用==
是否正确,如果没有,我应该做什么?
答案 0 :(得分:0)
从构造函数调用一个私有方法,并且正在做的工作被认为是不好的做法吗?如果是这样,我该如何纠正呢?
不,只要有意义就行,即降低单个方法的复杂性或DRYs代码。
在私有方法checkAuthors中,我使用==而不是equals()。我的目的是检查列表中存储的对象是否具有null值。是这种情况,我发现使用==工作,如果我使用equals()它给我null作为错误消息。在这种情况下使用==更正,如果没有,我应该做什么?
取决于您的对象的专业程度。如果这是在您的应用程序中的多个位置使用的关键状态检查,那么快速构建失败是一个好主意。考虑使用像Guava&#39; preconditions这样的东西来节省一些打字。