要抛出什么异常?

2022-09-02 11:34:00

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

谢谢。


答案 1

你可以抛出一个新的 IllegalArgumentException()。

抛出以指示方法已通过非法或不适当的参数。

只是不要忘记传递一个明确的信息作为第一个参数。这将真正帮助你了解发生了什么。

例如,“不能在空列表上使用均值”。


答案 2

首先要问自己的问题是,你是否应该抛出,然后,如果是这样,它是否应该是一个选中或未选中的异常。

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

在 Java 中,何时应创建已检验的异常,何时应将其设置为运行时异常?

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

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

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

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

我的观点:

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

  • 抛出非法论点异常如果我的设计说检查空列表是调用方的责任,并且该方法的文档将明确指出这是调用方的责任,那么我将使用标准未选中。IllegalArgumentException

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