如何控制方法的输入?

时间:2013-11-07 16:26:57

标签: java validation parameters

我有一个搜索方法来从数据库中检索记录,我想限制用户只按名称搜索。我有一个包含搜索参数列表的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");
    }
}

我们如何才能明确只允许值TITLEAUTHOR作为标识符名称的输入,而不是验证和抛出异常?

2 个答案:

答案 0 :(得分:1)

我没有使用它,但这个框架对你的要求有所帮助:

Java Argument Validation

  

检查(公共)方法的前提条件的简便方法   构造函数。可以在之前检查所有参数   抛出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 ...
    }
}

由您决定如何根据您要强制执行的规则验证实际名称。然后,您可以在异常中提供合适的消息,以解释它可能无效的原因。也许正则表达式可以用于验证代码,但不知道验证要求,这里不可能提出一个。