检查等效于非法争议异常?

2022-09-01 16:15:53

我有一个方法,它将枚举作为参数,并返回一些依赖于该参数的信息。但是,该枚举包含一些不应处理的值,并且应引发错误条件。目前,该方法会抛出一个 IllegalArgumentException,但我希望这是一个已检查的异常,以强制调用方捕获它(并优雅地返回,记录错误)。是否有合适的东西,或者我应该创建自己的异常子类?

我也对其他模式持开放态度。一个合理的反应是应该处理枚举的所有值,但事实并非如此。当一个新值被添加到枚举中时,我想确保此方法做正确的事情 - 在这种情况下,提醒人类比使用一些默认返回值更可取。

感谢您的任何建议。


答案 1

您当然可以创建自己的已检查异常(例如 UnhandledEnumType),也可以捕获并处理 IllegalArgumentException。听起来有点可疑,只应处理枚举的某些值。枚举的目的之一是将值绑定到一组特定的值,我希望所有值都得到处理。如果您担心要添加新的值,则应进行一次测试,以测试是否正确处理了所有值(通过使用枚举的 values() 方法确保它们都经过测试)。


答案 2

问题是:

  • 当使用不合适的枚举参数调用方法时,情况有多“正常”?
  • 您能正常处理这些情况,然后继续处理吗?

从你所描述的来看,它不是“正常的”(只有当添加了新的枚举值并且方法没有正确更新时才会发生 - 即当引入错误时)。所以对我来说,这听起来更像是RuntimeException的一个案例(即未选中)。此方法的调用方如果真的愿意,仍然可以捕获未经检查的异常,但不会强制这样做。

OTOH 我会尝试消除您描述的情况,方法是将方法返回的数据移动到枚举内。这样,每当添加新的枚举值时,都不可能忘记相关数据。

如果您有兴趣,可以查看本教程


推荐