java - 当输入导致 IndexOutOfBoundsException 时应该抛出哪个异常?
问题描述
我正在编写一种方法来查找列表中的第 X 个最大条目。标题是
<T extends Comparable<T>> T max(List<T> list, int rank) {...}
其中 rank 是找到最大值的位置,(即 0 是最大值,1 是第二大,...,list.size() -1
是最小值)。
rank
如果给出的参数是,我应该抛出什么异常>= list.size()
?是IndexOutOfBoundsException
, 因为您请求的索引值超出范围,还是IllegalArgumentException
因为 ,IndexOutOfBoundsExeption
是由给定参数引起的?
(我在何时使用 an 时阅读了这篇IllegalArgumentException
文章,但这让我更加困惑。在我的情况下,rank
输入可能是用户输入或来自程序中的不同位置,所以我不确定哪个适用。)
解决方案
您可以创建自己的未经检查的运行时异常,清楚地识别问题并抛出:类似于“RankIsGreaterThanListSizeException”。异常名称比任何其他选项都提供更多详细信息。您可以在消息中包含提供的排名和列表大小以获得额外的上下文。
推荐阅读
- python - 如何在python中跳过列表中的项目?
- c# - 与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?
- java - Kotlin 和 Springboot 中的 CORS 预检错误
- google-apps-script - Google Apps 脚本函数给出错误“异常:那些行超出范围。” 删除行时
- python - 从 url 保存图像的名称
- r - 如何像 actionButton 一样使用 selectInput?
- ruby - 对块应用细化
- ffmpeg - 如何在不停止广播的情况下用另一个替换当前的 ffmpeg 命令
- vue.js - NuxtJS 存储状态变量不断返回 undefined
- python - 使用 Selenium Python 找不到按钮