On Mon, Feb 23, 2009 at 8:29 AM, Peter Becker <[email protected]>wrote:

>
> 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.
>


I think you only make it final to "mother other developers", as Kirk said.
And I don't see this as a good enough reason... Besides there's always ways
to break something if that is what you want. Sadly also if that's what you
don't want. Constraining people all the time for their "best" is a scary
thought to me, even in software development.
My point is, it's not because a class is not marked as final that all class
extending it will break its immutability either!


>
> 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
>
>
> >
>


-- 
Alexander Snaps <[email protected]>
http://www.jroller.com/page/greenhorn
http://www.linkedin.com/in/alexandersnaps

--~--~---------~--~----~------------~-------~--~----~
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