当1参数具有基于第二参数的非法值时抛出的异常

时间:2016-08-31 01:29:35

标签: java exception

我有一个方法需要2 boolean个参数。如果第一个参数为true,则第二个参数也不能为真。

如果它们都是真的我想抛出一个Exception,但我不确定哪个异常是最准确的。

示例:

public void addEvent(boolean hadPositiveResult, boolean needsFurtherStudy) {
    if (hadPositiveResult && needsFurtherStudy)
        throw new Exception("Can not need further study if the event had a positive result"); //this should be a more specific exception

    //rest of method code omitted...
}

IllegalArgumentExceptionIllegalStateException会有意义吗?是否有更好的描述它的更好?

3 个答案:

答案 0 :(得分:2)

考虑不这样做。不要进入"我的方法需要一堆标志"游戏。

你知道,良好的界面会使你的客户端代码很难做错事!在你的情况下,一个"弄错了#34;通过简单传递(真实,真实)。这听起来很容易出错。特别是因为您的方法名称并未指示{strong>完全 addEvent(true, true)将在运行时抛出。老实说:这绝不是一个强大的设计!

一个可能的解决方案:使用枚举而不是布尔值。该枚举仅包含有效个案的常量。但老实说,有点像

enum AdderConditions {
   NONE, NEEDS_POSITIVE_RESULT, NEEDS_FURTHER_STUDY };

也不太吸引人。

为了真正解决"为此,有必要详细了解您的要求;并且可能设计出完全不同的解决方案但这超出了本网站的范围。

所以,我的个人建议:找一个在做好OO设计方面经验丰富的人;告诉他你的问题,并询问他将如何重组你的整个流程,以避免进入"设置标志"生意完全!我向你保证:这是值得的。

迟早,你可能会"其他"在某个地方标记,然后你最终得到客户端代码" true,false,true"等等;并且没有人理解正在做什么,或者为什么一个组合起作用;另一个给你例外。

答案 1 :(得分:0)

来自https://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html

  

抛出表示某个方法已被传递为非法或   不恰当的论点。

所以是的,这听起来像投掷和IllegalArgumentException是合适的。此外,您可以向异常添加消息以通知调用者错误,例如

if (param1 && param2) {
    throw new IllegalArgumentException("Both parameters cannot be true");
}

答案 2 :(得分:0)

为此您可以抛出IllegalArgumentException,但在内部消息中您可以说出参数有什么问题,例如:

throw new IllegalArgumentException("second parameter....");

然后你可以在catch子句中获取消息,并检查出错了。