我有一个搜索方法来从数据库中检索记录,我想限制用户只按名称搜索。我有一个包含搜索参数列表的SearchBy
枚举,对于特定的SearchBy
方法,用户只能按特定值进行搜索。
public List<Book> getBooks(SearchBy identifierName,List<String> identifierList) throws UnsupportedOperationException{
List<Book> resultList = new ArrayList<Book>();
if (identifierName.equals(SearchBy.TITLE)) {
//returns list of BookObjects
} else if (identifierName.equals(SearchBy.AUTHOR)) {
//returns list of BookObjects
} else {
throw new UnsupportedOperationException("Books can be retrieved only using book titles or author names");
}
}
我们如何才能明确只允许值TITLE
和AUTHOR
作为标识符名称的输入,而不是验证和抛出异常?
答案 0 :(得分:1)
我没有使用它,但这个框架对你的要求有所帮助:
检查(公共)方法的前提条件的简便方法 构造函数。可以在之前检查所有参数 抛出IllegalArgumentException。为...创建一致的消息 论证价值的不便。
答案 1 :(得分:1)
很难说出你的意思,但是如果你试图验证方法的输入,那么通常会为不良输入抛出IllegalArgumentException
,然后客户端代码可以根据需要处理它。
您通常会执行以下操作来验证方法的输入:
public void method(String name) throws InvalidArgumentException {
if (isInvalid(name)) {
throw new IllegalArgumentException("The name is invalid");
}
else {
// rest of method ...
}
}
由您决定如何根据您要强制执行的规则验证实际名称。然后,您可以在异常中提供合适的消息,以解释它可能无效的原因。也许正则表达式可以用于验证代码,但不知道验证要求,这里不可能提出一个。