Obviously the milage varies a lot in this. I can't recall chasing any
bugs originating from missing final. I have chased a bug where arrays
has been modified or reused, but final doesn't prevent that. I am
still -1 to introduce this all over the place. Show me a real bug
which could be prevented by a final method argument or final local
variable. -- Niclas

On 5/25/08, Michael Hunger <[EMAIL PROTECTED]> wrote:
> Thank David I couldn't agree more. It denotates and communicates which
> parameter/local variable _references_ are immutable and should not be
> reassigned/reused which is a common and hard to find problem (e.g. typo)
> if you reuse params/local variables. I spend many hours looking for this
> kind of errors in different codebases and have to say that I rather
> spend these hours writing productive code :).
>
> It also stresses the query character of many functions (side effect
> free). If you combine this with real immutable parameters and variables
> you have a consistent immutability. With some VMs you help the garbage
> collector and hotspot when using final, but imho the current Sun JVMs
> don't need that anymore if you enable escape analysis.
>
> Having the compiler complaining this (or rather the IDE) is quite
> convenient.
>
> I also use final on foreach iterator values.
>
> I'd rather have this as the default in the language and explicitly mark
> non final stuff but thats to late by now :).
>
> Michael
>
> David Leangen schrieb:
>>> I must say that I have never understood the "final" on method
>>> arguments. It doesn't bring any value. If the method argument is a
>>> native type, I can change it as much as I want as it doesn't modify
>>> the caller's value. If the argument is a mutable object, "final"
>>> doesn't stop me from modifying the object, only the reference which in
>>> turn doesn't affect the caller. Similar for local variables. And IMHO,
>>> "final" adds a lot of clutter everywhere. I like using "final" where
>>> it makes a difference, not out of principle. -- Cheers, Niclas.
>>
>> The point is that unless you can _guarantee_ that parameters are
>> immutable,
>> then a lot of damage and bad side effects can happen during a method call.
>>
>> The simplest way of adding an extra layer of protection is to simply add
>> "final" to the method param. That way you know for sure at compile time
>> (i.e. more brainless stuff to take a load off all the already existing
>> complexity in the system) that you're not causing any side effects.
>>
>>
>> YMMV, but I've found that once you get used to "final", you don't even
>> notice it anymore. In fact quite the opposite: you notice more when it's
>> _not_ there (which I guess is the whole point of having it in the first
>> place).
>>
>>
>> Cheers,
>> Dave
>>
>>
>>
>> _______________________________________________
>> qi4j-dev mailing list
>> [email protected]
>> http://lists.ops4j.org/mailman/listinfo/qi4j-dev
>
>
> --
> Michael Hunger
> Independent Consultant
>
> Web: http://www.jexp.de
> Email: [EMAIL PROTECTED]
>
> Enthusiastic Evangelist for Better Software Development
> We support Software Engineering Radio (www.se-radio.net)
>
> _______________________________________________
> qi4j-dev mailing list
> [email protected]
> http://lists.ops4j.org/mailman/listinfo/qi4j-dev
>

-- 
Sent from Gmail for mobile | mobile.google.com

_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to