我有一个方法需要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...
}
IllegalArgumentException
或IllegalStateException
会有意义吗?是否有更好的描述它的更好?
答案 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
子句中获取消息,并检查出错了。