kirk wrote:
> Peter Becker wrote:
>   
>> kirk wrote:
>>   
>>     
>>> [email protected] wrote:
>>>   
>>>     
>>>       
>>>> On Feb 17, 6:15 am, Alexander Snaps <[email protected]> wrote:
>>>>   
>>>>     
>>>>       
>>>>         
>>>>> On Sun, Feb 15, 2009 at 7:13 PM, Reinier Zwitserloot 
>>>>> <[email protected]>wrote:
>>>>>
>>>>>     
>>>>>       
>>>>>         
>>>>>           
>>>>>> I mark any immutable class final, because if it isn't, then you can't
>>>>>> rely on its immutability (any subclass is assignment compatible and is
>>>>>> not neccessarily immutable!).
>>>>>>       
>>>>>>         
>>>>>>           
>>>>>>             
>>>>> While I tend to agree with marking "type" classes as final, I don't 
>>>>> believe
>>>>> that a class being immutable is reason enough to mark it final.
>>>>>     
>>>>>       
>>>>>         
>>>>>           
>>>> If it's not final, it probably isn't immutable. Take java.io.File.
>>>> Please.
>>>>   
>>>>     
>>>>       
>>>>         
>>> Marking a class as final is a whole different ball game than marking a 
>>> variable as final. For example, marking String as final was a HUGE 
>>> mistake IMHO. It prevented people from making some very useful 
>>> extensions. It's also responsible for a lot of code bloat. I'm not 
>>> against making a class final. That said, to do so because of the need to 
>>> mother other developers shouldn't be one of them.
>>>   
>>>     
>>>       
>> If String wouldn't be final, then its immutability could not be 
>> guaranteed, which would mean you
>>   
>>     
> final class doesn't mean the value is immutable, it means that the class 
> cannot be extended.
>   
I'm aware of that, but if you don't put the "final" there even if you 
write a perfectly immutable class yourself, you can still not assume 
that all instances of it are immutable since subclasses might break that 
assumption. So if you want an immutable class, then you have to

  (a) make sure you write it immutable, and
  (b) make it final.

And that's how the String class is done. A proper language concept of 
immutability would be much nicer, but it's not what was done.

  Peter


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to