我有一个函数来计算作为参数传递的列表的平均值.我想知道当我尝试计算大小为0的列表的平均值时,我应该抛出哪个Java异常.
public double mean (MyLinkedList<? extends Number> list)
{
if (list.isEmpty())
throw new ????????; //If I am not mistaken Java has some defined exception for this case
//code goes here
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Col*_*ert 26
你可以扔一个new IllegalArgumentException().
抛出以指示方法已被传递非法或不适当的参数.
只是不要忘记传递一个明确的信息作为第一个参数.这将真正帮助您了解发生的事情.
例如"不能在空列表中使用均值".
首先要问自己的问题是你是否应该投掷,然后,如果是的话,是否应该是一个检查或未检查的例外.
不幸的是,在决定这些事情方面没有行业最佳实践,如StackOverflow的答案所示:
在Java中,何时应该创建一个已检查的异常,何时应该是运行时异常?
然而,有一些关键的考虑因素:
您对此方法应如何工作的设计/愿景(使用0大小列表调用方法是否合理/正常)?
与类/包中的其他方法保持一致
符合您的适用编码标准(如果有)
我的看法:
返回Double.NAN或0如果调用具有0大小列表的方法是合理的/预期的/正常的,我会考虑返回Double.NAN或者0是否0适合您的问题域.
抛出一个IllegalArgumentException如果我的设计说检查一个空列表是调用者的强烈责任,并且该方法的文档将明确指出它是调用者的责任,那么我将使用未经检查的标准IllegalArgumentException.
抛出自定义检查异常如果该方法是统计包或库的一部分,其中有几个统计函数需要处理可能的空数据集,我认为这是一个异常条件,它是问题域的一部分.我创建一个自定义(可能已检查)的异常(例如EmptyDataSetException)作为类/包/库的一部分,并在所有适用的方法中使用它.将其作为已检查的异常有助于提醒客户考虑如何处理该情况.