在 finally 块中包含业务逻辑是否合法?

Is it legitimate to have business logic inside a finally block?

我有一个与控制结构纠缠在一起的方法。它有多种退出方式。在离开该方法之前,我需要做一些最后的处理。与其在每次退出之前重复相同的逻辑,或者在方法中重构该逻辑并多次调用它,不如将其留在 finally 块中似乎很方便。它真的是对 finally 的合法使用还是我在滥用它?

finally 是有原因的,添加必须在退出块之前执行的逻辑

如果您不want/need使用AOP/AspectJ

,这是一个有效的方法选择

请注意,您可能必须使用 finally 作为发布资源,因为 Connection

例如你可以在必须audit/log或者在方法结束时做自治事务的时候使用它

正如@DaveNewton 评论的那样,在某些情况下可能会有更好的refactoring/separating 逻辑方式,但您不能忽视它是一种有效用法