Java中捕获并重新抛出异常的术语是什么?

4

我记得有一个非常特定的术语用于这种情况:

try {
  operation();
} catch (SomeException se) {
  throw new OtherException(se);
}

-or-

try {
  operation();
} catch (SomeException se) {
  throw new OtherException("new message, forget original exception");
}

我希望在一些文档中使用正确的术语,有人能帮我想起来吗?


编辑:根据JB Nizet引用的链接,链接是指将原始异常传递给新异常的构造函数,以便堆栈跟踪包括原始异常。但这不是我要找的概念。如果我的问题让你产生了误解,我很抱歉。


@Kublai Khan:不完全是我想要的,但因为有趣的回答而+1 :) - Carl Smotricz
7个回答

4
作为对您编辑的回应:在这种情况下,您只是“抛出”异常。它碰巧是在 catch 块中抛出的。建议您直接明确地说明您正在做什么,而不是使用可能会引起混淆的术语,比如“转换”(我认为这意味着变异,而不是新东西)。
您正在使用“包装”方式处理捕获的异常。另一个术语是“异常链接”。
请注意,重新抛出异常是不同的,因为您没有创建一个新的异常,只是捕获它进行一些日志记录(或其他操作),然后再次抛出它。举个例子:
try {
  operation();
}
catch (SomeException se) {
  throw se;
}

我选择在你的回答基础上添加内容,而不是创建一个新的回答,因为我的额外评论基本上是你所说的延伸。希望这样可以。 - mikej
@mikej,我相信那被称为“传播”。 - mre
异常链似乎没有捕获我想要的内容;请参见我对JB Nizet的回答。那么,我猜“包装”就可以了。非常感谢! - Carl Smotricz

3

这被称为重新抛出或异常转换,目的是将不同的API协调到更抽象的API上(通常在Spring框架中完成)。


“异常转换”听起来非常接近我所想的。谢谢! - Carl Smotricz
1
事实上,这正是Spring所使用的术语。例如,请参阅SQLExceptionTranslator - Alistair A. Israel

2

我毫不羞愧地使用"rethrow"。

无论如何,你正在将异常封装在一个新的异常中。


2
异常包装或异常链接

异常链似乎无法捕获我想要的内容;请查看我给JB Nizet的回答。那么,我猜“包装”是正确的解决方法了。非常感谢! - Carl Smotricz
异常翻译可能是你要找的术语。http://www.javapractices.com/topic/TopicAction.do?Id=120 - Mike Kwan
我认为异常链可能仍然是正确的术语:http://download.oracle.com/javase/1.4.2/docs/guide/lang/chained-exceptions.html - Mike Kwan
感谢您的额外关注。我理解Oracle文章是在描述将源异常信息嵌入新异常中(因此您会得到“由...引起”的堆栈跟踪等)。从其他回复中可以看出,翻译或转换似乎是其余部分发生的正确术语。 - Carl Smotricz

1

我相信我曾经听说过将其称为异常包装。如果这不是你要找的术语,对不起。


可能“wrapping”是正确的术语。我仍然认为有一个更好的术语,但到目前为止,大多数人都说那就是它。谢谢! - Carl Smotricz

1

非常感谢这个有用的链接!它帮助我澄清了正在发生的事情。就我所理解的,“chaining”是指使原始异常作为新异常的原因可用。但是,即使我没有传递原始异常,我所问的概念也会拥有我正在寻找的名称。我更想表征的是将一个异常类型转换为另一个异常类型的“转换”。 - Carl Smotricz

1

它也被称为

异常链


虽然你回答了我最初的问题,但却不是我想要的(还是谢谢你,所以给你一个加一!)请参考我的编辑以便更明确地理解我的意思。 - Carl Smotricz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接