抛出什么例外?

nun*_*nos 17 java exception

我有一个函数来计算作为参数传递的列表的平均值.我想知道当我尝试计算大小为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().

抛出以指示方法已被传递非法或不适当的参数.

只是不要忘记传递一个明确的信息作为第一个参数.这将真正帮助您了解发生的事情.

例如"不能在空列表中使用均值".


Ber*_*t F 8

首先要问自己的问题是你是否应该投掷,然后,如果是的话,是否应该是一个检查或未检查的例外.

不幸的是,在决定这些事情方面没有行业最佳实践,如StackOverflow的答案所示:

在Java中,何时应该创建一个已检查的异常,何时应该是运行时异常?

然而,有一些关键的考虑因素:

  • 您对此方法应如何工作的设计/愿景(使用0大小列表调用方法是否合理/正常)?

  • 与类/包中的其他方法保持一致

  • 符合您的适用编码标准(如果有)

我的看法:

  • 返回Double.NAN或0如果调用具有0大小列表的方法是合理的/预期的/正常的,我会考虑返回Double.NAN或者0是否0适合您的问题域.

  • 抛出一个IllegalArgumentException如果我的设计说检查一个空列表是调用者的强烈责任,并且该方法的文档将明确指出它是调用者的责任,那么我将使用未经检查的标准IllegalArgumentException.

  • 抛出自定义检查异常如果该方法是统计包或库的一部分,其中有几个统计函数需要处理可能的空数据集,我认为这是一个异常条件,它是问题域的一部分.我创建一个自定义(可能已检查)的异常(例如EmptyDataSetException)作为类/包/库的一部分,并在所有适用的方法中使用它.将其作为已检查的异常有助于提醒客户考虑如何处理该情况.