One issue I have when presenting these sort of things to junior developers (or even seniors who have lost their way :)) is to make them understand that these this represent "rules of thumb" as apposed to "rules of law".
I'm interested in the following statement.
Every parameter to a method should be declared final unless the parameter is intended to be an out or in-out parameter.
Now am I a big user of final but I don't understand how it effects out or in-out parameters. Even if the instance reference is declared final it's contents can be modifed. In fact for out or in-out parameters (ie parameters whose internal structure you are going to modify) you should always declare them as final to ensure that method code does not change the refered to instance. Or is there something that I'm missing?