Java try-finally return design question

Technically speaking, the return in the try block won’t be ignored if a finally block is defined, only if that finally block also includes a return.

It’s a dubious design decision that was probably a mistake in retrospect (much like references being nullable/mutable by default, and, according to some, checked exceptions). In many ways this behaviour is exactly consistent with the colloquial understanding of what finally means – “no matter what happens beforehand in the try block, always run this code.” Hence if you return true from a finally block, the overall effect must always to be to return true, no?

In general, this is seldom a good idiom, and you should use finally blocks liberally for cleaning up/closing resources but rarely if ever return a value from them.

Leave a Comment