我在一段时间内遇到了以下问题。
假设你有一些代码,在某些时候你需要抛出异常。假设我们想要抛出一个运行时异常。
Java有很多例外,在某些情况下,您可能会找到一个适合您的情况。
问题是如何确定哪种例外最适合我的情况?
我的问题只是关于warranty
的现有Java实现,而不是扩展此类的自定义异常。
我们举一个例子。我有以下switch语句:
RuntimeException
我应该使用什么代替switch(something){
case A: ... break;
case B: ... break;
default: throw new AJavaRuntimeException("No such case defined");
}
并附带Java?如何通过Java找到正确的异常?
最简单的解决方案是扩展AJavaRuntimeException
并创建RuntimeException
。或者甚至抛出NoSuchSwitchCaseDefinedException
。但是......也许Java已经有了这方面的东西。
答案 0 :(得分:2)
浏览API以获取RuntimeException
的直接已知子类,可能会让您最适合“目录”。
在这种情况下,您可以抛出:
如果找不到完全匹配,则应根据您的要求(检查与未检查)延长Exception
或RuntimeException
。
答案 1 :(得分:2)
如果您需要独立抛出异常,最好抛出一个自定义用户定义的异常,并且必须对其进行检查。 永远不要自己抛出运行时异常。 创建业务异常并抛出它们。
答案 2 :(得分:0)
这里有很多哲学要遵循。我遵循的哲学是未经检查的异常(即从 RuntimeException 或 Error 继承的所有内容)仅用于报告编程错误(例如,通过错误对话框或日志消息)。编程错误只能以一般方式处理(例如通过中止操作,跳过可选的处理步骤等)。这意味着从技术意义上讲,用于异常的实际类型并不重要。
重要的是,异常,其名称,其消息以及随附的JavaDoc注释使它尽可能简单地确定是什么触发了该错误,可能的解决方法以及如何最终修复该错误。
如果您编写的库可能由于使用不正确而失败,则具有特定于域的未经检查的异常可能会使使用该库更加愉快,因为您有机会为可能会为错误提供的大量上下文和文档晦涩。
如果您正在编写最终用户应用程序或服务,则您或您的时间很可能是唯一看到这些异常的人之一,因此,额外的工作可能不值得,而短时间内抛出RuntimeException
对问题进行描述,因为其消息可能就足够了。