例如:
getBooks(author, title)
要消除这种情况,请具备以下功能:
getBooks(author)
getBooks(title)
getBooks(author, title)
getBooks()
在新函数中,可能存在冗余代码,或者如果我们将这些冗余代码分组到函数中,我们仍然会进入具有空参数的函数。有什么更好的方法来处理这个 - 没有冗余代码和没有空参数?
答案 0 :(得分:7)
不要过载:
getBooksByAuthor(author)
getBooksByTitle(title)
getBooksByAuthorAndTitle(author, title)
getBooks()
请注意,这不会减少代码重用:这些方法可以在其实现中重用/共享所需的代码
答案 1 :(得分:0)
尝试这种方法:
getAllBooks() {return getBooks("", "");}
getBooksByAuthor(author) {return getBooks(author, "");}
getBooksByTitle(title) {return getBooks("", title);}
getBooksByAuthorAndTitle(author, title)
{
if(author.equals("") && title.equals(""))
{
return //your book list
}
else if(author.equals(""))
{
return //a list of books with the given title
}
else if(title.equals(""))
{
return //a list of books with given author
}
else
{
return //a list of books with the given title and author
}
}
修改的: 更新以避免歧义。
答案 2 :(得分:0)
您可以使用常量来表示要执行的搜索类型,并检查是否传递了参数(非常未经测试并检查错误):
public static final int R_AUTH = 1;
public static final int R_BOOK = 2;
public static final int R_ALL = 3;
public bookSearch( int searchType, String... search )
{
switch( searchType )
{
case R_AUTH:
// search based off of (String)search[0].stringValue();
break;
case R_ALL:
// load all
break;
}
}
bookSearch(R_ALL);
bookSearch(R_AUTH, "Poe");
答案 3 :(得分:0)
假设作者和标题是字符串,您可以执行以下操作:
public List getBooks(String params ...) {
if (params.length == 0) { //search
//do search all books regardless of title or author
} else if (params.length == 2 && "cte_author".equals(params[1])) {
//do search by author
} else if (params.length == 2 && "cte_title".equals(params[1])) {
//do search by title
} else if (params.length == 2){
//do search by title and book
} else {
//throw exception
}
}
因此您可以使用以下方法:
getBooks();
getBooks("Gabriel Garcia Marquez", "cte_author");
getBooks("Cien anios de soledad", "cte_title");
getBooks("Gabriel Garcia Marquez","Cien anios de soledad");