我的应用程序服务中有一个接收实体的 id 的方法:
Document doStuff(Long documentId);
在我的方法中,我正在检查传递的id是否与先前存储的实体匹配,否则会抛出异常。
现在,我怀疑,这是com.application.exceptions.DocumentNotFoundException
一个RuntimeException
还是Exception
?
使用它来管理案件的Service
部队的ID是错误的,还是隐含的?
答案 0 :(得分:2)
作为参考:
运行时异常(未经检查的异常)
RuntimeException 类表示Java虚拟机中发生的异常(在运行时)。一个 运行时异常的示例是 NullPointerException 。检查运行时异常的成本通常超过了捕获它的好处。试图一直捕获或指定所有这些将使您的代码不可读且不可维护。编译器允许运行时异常未被捕获和未指定。如果你 比如,您可以像其他例外一样捕获这些异常。但是,您不必在“投掷”中声明它。条款或在捕获条款中捕获它。
此外,您可以创建自己的RuntimeException子类,这种方法可能是首选,因为已检查的异常可能会使方法复杂化 签名,可能很难遵循。
为什么不建议捕获“异常”类型
Java中的异常处理本质上是多态。例如,如果您在代码中捕获类型Exception,那么它 可以捕获或抛出其后代类型,如IOException。因此,如果您在之前捕获类型Exception 键入IOException然后类型Exception块将捕获整个异常并键入IOException块 永远达不到。为了捕获类型IOException并以不同方式处理它以键入Exception,IOException 应该先被抓住(记住你不能在一个较小的篮子上方有一个更大的篮子)。
答案 1 :(得分:1)
我认为你要问的是它是否是一个已检查或未经检查的异常;我们看到它是未经检查的。
如果您要声明您的异常类 - 它应遵循相同的路径,即创建未经检查的异常。
答案 2 :(得分:0)
http://docs.oracle.com/javaee/6/api/javax/persistence/EntityNotFoundException.html
EntityNotFoundException是一个RuntimeException,它是一个Exception。虽然请记住,未编译的RuntimeExceptions将编译。
您应该使用EntityNotFoundException
答案 3 :(得分:0)
由于EntityNotFoundException派生自
javax.persistence.PersistenceException
和 PersistenceException 派生自 的了java.lang.RuntimeException 强>
如此直接的you你应该延伸
java.lang.RuntimeException.
答案 4 :(得分:0)
现在,我怀疑,这是
com.application.exceptions.DocumentNotFoundException
一个RuntimeException
还是Exception
?
如果我们看到你的异常类及其超类的源代码,我们只能回答这个问题。
如果RuntimeException
是超类,则您的例外是RuntimeException
;即未经检查的例外。
否则,如果Exception
是超类,则您的例外是Exception
;即它是已检查例外。
否则,您通过声明Error
或a(天堂禁止!)Throwable
的子类来“违反规则”。 (在前一种情况下,例外是未选中。在后一种情况下......你要求麻烦!)
服务人员是否应该使用它来管理案例的id是错误的,还是隐含的?
这是由您根据该方法的语义...以及您的API来决定的。检查异常是否是一个好主意是一个观点问题。但这是我用来决定的标准:
如果使用无效ID调用该方法是“错误”(即编程错误),则建议将其作为未经检查的异常。
这是一个问题,你期望应用程序尝试处理异常,然后建议将其作为检查异常。这样程序员就不会忘记。
您需要根据具体情况做出这些判断。