将Exception类重用于其他目的

时间:2014-07-04 23:25:30

标签: java exception

对于名称,是否将异常用于与预期目的不同的目的?例如,我想要一个与“已经存在”相似的异常,我发现了异常“EntityExistsException”。名字很棒,但它似乎是为了EntityManager。是否可以使用该课程,还是应该创建自己的课程?

2 个答案:

答案 0 :(得分:1)

这个问题可能是根据具体情况得到最好的答案,因为"目的不同于预期的目的"提供一个完整的建议是有点模糊。

在你的情况下,它可能归结为品味问题。就个人而言,除非您已经存在的异常需求与持久层相关,否则我建议不要重用该包中的异常,因为它很容易产生新的异常并且不会混淆任何未来的开发人员或可能推断异常的代码。从底层实现传递。

答案 1 :(得分:1)

阅读文档。任何不熟悉您的代码的人都会查看异常,并了解其文档或阅读它。

在这种情况下,文档说明例外是

  EntityManager.persist(Object)时由持久性提供程序抛出的

  被称为

因此,如果您的代码在其他情况下抛出,那么您的代码与Java API不兼容并且存在错误。

我倾向于使用或子类IllegalStateException用于您的情况,因为这是一个通用的例外,被广泛使用,并且“已存在的东西”的状态属于其规范。如果我希望客户端代码以不同于其他失败状态的方式处理“已存在”状态,那么我会将其子类化,否则我不会。