我正在编写一个小型库,需要在其中访问几种不同类型的文件。尽管每种文件格式的访问方法本身都不同,但它们似乎有很多共同点,我在类层次结构中放置了一个接口,在其中编写了一种应连接到数据源的方法。
但是,由于数据源可能受到密码和/或用户权限的保护,因此有时需要进行身份验证才能检索数据。我的问题是:
在需要身份验证时引发异常是个好主意吗?
由于我想尽可能少地公开实现,因此我只想告诉用户发生了什么。但是身份验证可能需要很多不同的东西(用户名,密码等),所以我可以将它们打包到一个异常中并丢弃吗?或者,也许有一种不求助于异常的更好的方法,因为“需要身份验证”实际上并不是异常通常用于处理异常行为。
需要身份验证时会抛出什么异常?
现在假设我决定使用异常来处理此问题。我应该抛出哪个异常? Java API附带的几个AuthenticationException
似乎不符合此要求,因为它们似乎都是非常区分大小写的,例如,在命名服务中使用。我不确定是否要使用SecurityException
,但是如果这样做不正确,我仍然真的不想抛出自己的异常,因为这将阻碍其他人理解我的代码以及API的工作原理。
感谢您的输入!这有点冗长或太冗长,因此可以改善问题的任何编辑都非常受欢迎。
最佳答案
由于它是您自己的API,因此您可以创建自己的Exception来附带它,该Exception可以携带详细信息...使用“听起来最接近”您的异常的Java异常没有任何要求或好处。
我个人发现,用try / catch块添加代码很繁琐而且难看。因此,我尝试制作不需要它的API。
在您的情况下,也许您可以提供查询,以便您的API客户端可以对操作进行预检,其用法可能类似于:
Thing t = new Thing(...);
if(t.needsAuth())
{
boolean ok = t.doPassword("abc123");
if(!ok)
log("wrong password");
}
boolean did= t.doIt();
if(!did)
log("sorry: " + t.getProblem());