0

我的应用程序服务中有一个接收实体id的方法:

 Document doStuff(Long documentId);

在我的方法中,我正在检查传递的 id 是否与先前存储的实体匹配,如果不匹配,则会引发异常。

现在,我的疑问是,这是com.application.exceptions.DocumentNotFoundExceptionaRuntimeException还是 an Exception

使用它来管理案件的力量应该Service是 id 是错误的,还是隐含的?

4

5 回答 5

2
于 2013-10-23T08:45:39.940 回答
1

我想你的意思是它是检查还是未经检查的异常;正如我们所见,它没有被选中。

如果您打算声明您的异常类 - 它应遵循相同的路径,即创建未经检查的异常。

于 2013-10-23T08:48:10.057 回答
0

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityNotFoundException.html

EntityNotFoundException 是一个 RuntimeException,它是一个异常。尽管请记住,未处理的 RuntimeExceptions 将编译。

您应该使用 EntityNotFoundException

于 2013-10-23T08:47:27.527 回答
0

由于 EntityNotFoundException 派生自

javax.persistence.PersistenceException 

PersistenceException派生自 java.lang.RuntimeException

如此直接,你应该扩展

java.lang.RuntimeException.
于 2013-10-23T08:52:12.290 回答
0

现在,我的疑问是,这是com.application.exceptions.DocumentNotFoundExceptionaRuntimeException还是 an Exception

如果我们看到异常类及其超类的源代码,我们只能回答这个问题。

  • 如果RuntimeException是超类,那么您的例外是RuntimeException; 即未经检查的异常。

  • 否则,如果Exception是超类,那么您的例外是Exception; 即它是一个检查异常。

  • 否则,您通过声明一个子类Error或 a (heaven forbid!)来“违反规则” Throwable。(在前一种情况下,异常是unchecked。在后一种情况下......你在自找麻烦!)


使用它来管理 id 错误的服务人员应该是错误的,还是隐含的?

这是由您根据该方法的语义来决定的……以及您的 API。检查异常是否是一个好主意,这是一个见仁见智的问题。但这里是我用来决定的标准:

  • 如果使用无效 id 调用该方法是“错误”(即编程错误),则建议将其设为未经检查的异常。

  • 这是一个问题,您希望应用程序尝试处理异常,然后建议将其设置为检查异常......这样程序员就不会忘记。

您需要根据具体情况做出这些判断。

于 2013-10-24T17:27:38.640 回答