Tor Norbye has a nice discussion on the use of final for constructor and setter arguments here. I couldn’t agree more with Tor on this. I’ve been coding like this for more than a year now. I actually use final in many places now that never occurred to me before:
- On local variables that shouldn’t change.
- On method parameters (almost always).
- On variables representing constants (or course!).
I’ve lost count of the number of times this trick has saved me. It reminds me of my old C/C++ days when people were always getting caught by code like this:
if (myVar = 0) doSomething();
This, of course, is not only always false but also destroys the current value of myVar. I realized that my if statements frequently contained a literal value and trained myself to code the above like this:
if (0 = myVar) doSomething();
which, of course, caused a compile error making me catch my mistake of using = rather than == before my code got to the test stage (or later).
Of course Java protects us from foolishness like the above but, as Tor points out, it is still possible to step on your own foot.
I first stumbled on how useful (and efficient) final could be reading Hardcore Java by Robert Simmons, Jr. I would recommend this book to you based on the discussion of final alone.
Anyway, nice job Tor, if you’d only learn how to line up your curly braces we’d be totally on the same page. 🙂