Java:声明可以引发异常的接口方法的正确方法是什么?
|
假设我有一个由多个供应商实现的接口A:
interface A
{
void x();
void y();
}
但是,我希望供应商能够引发异常以表明发生故障,并且该方法可能引发“ 1”。在每种情况下,调用这些方法的代码都应处理失败并继续。仅仅因为1个供应商抛出NPE,我不希望系统崩溃。我不想将其留给调用方法的人(或者实际上是维护人员),而是希望通过将每个方法声明为:来确保每个调用都能捕获所有异常:
void x() throws Exception;
但这通常是不好的做法(PMD不喜欢它,并且我通常同意具体方法的规则),所以我想知道这是该规则的例外还是有更好的方法?
让我清楚一点,我正在寻找一种解决方案,其中接口的调用者被迫处理所有异常(包括ѭ1()。
为了进一步详细说明我的环境,所有这些都在OSGi框架内运行。因此,每个供应商将他们的代码打包在一起,OSGi将处理所有异常,以防止整个系统崩溃。我真正要看的是OSGi服务接口,这些接口将被某些核心捆绑软件调用。我要确保的是,当我遍历所有服务时,一个服务不会抛出NPE并停止正在执行的进程。我想通过捕获服务抛出的所有异常来更优雅地处理它,以便仍然管理其他提供的服务。
没有找到相关结果
已邀请:
7 个回复
肉脓措伪
并从界面扔掉。这里的想法是抛出有意义的异常,因此不要害怕创建许多自定义异常类,如果它们为您的目的提供了最大的可读性和可维护性。您可以在下游捕获供应商的详细异常,并将其包装为自定义异常,这样上游流程就不必处理特定于供应商的异常。
根据经验,切勿抓住
,始终抓住
并加以应对!
旅牢斯讲
的自定义例外;这是一个已检查的异常。您必须将其添加到throws子句中;编译器将围绕这些方法强制进行try / catch;您的客户将不得不处理该问题。
俯乡骚钵皆
皇小福另届
很丑陋。我认为最好 定义新的,特定于域的非运行时异常类(如果内置的类不会起作用;如果您匹配它们的语义,则始终坚持使用预定义的类),并在可以抛出它们的方法中对其进行声明 将运行时异常保持在最低限度。仅当您无法控制自己的名字时,它们才有意义。如果您有任何理由期望它们在您正在调用的一段代码中被抛出,那么请尽早捕获它们并将它们作为标准异常重新抛出(请参见上文)。 Java的最新版本允许您链接异常。例如,如果在使用外部库解析
时得到
,则可能希望将其捕获并重新抛出为as13ѭ。
babsoft
悲帽慑彤电
田眯衅