yes, but its also easy to fix. Just don't call any overridible methods
inside constructors. And for everything else there is onbeforerender()
On 11/3/07, jweekend <[EMAIL PROTECTED]> wrote:
>
> that sb:
> final protected Eye getEye(){return eye;}
>
>
>
> jweekend wrote:
> >
> > Probably right.
> >
> > In the example below, some may argue that the javadoc (here aimed at
> > sub-classers) on the parent class' constructor could say (as loudly as
> > possible, but probably never quite loudly enough) that doStuff() is called
> > before all state is fully initialised (in this case, eye is still null)
> > ie sub-classers over-riding doStuff() must be aware that getEye() will
> > return null during initialisation (construction) if called in the
> > over-riding doStuff() implementation. However, in java, sub-classers can't
> > be forced to pay any attention to this.
> >
> > I agree that this variant of the "template method pattern" (for java
> > constructors) is at best dangerous: sub-classers are almost invited to try
> > to do stuff that their state may not yet be initialised for;
> > eg: if the over-ridden method (which is the implementation that will
> > actually be run by the super-class' constructor - as in polymorphism)
> > tries to use inherited state.
> >
> > Here's an example for anyone who is still wondering what all the fuss is
> > about:
> >
> > public class Parent{
> > private Eye eye;
> > public Parent{
> > doStuff();
> > eye = new Eye("black");
> > }
> > protected void doStuff(){ // consider marking this final
> > // do some stuff
> > }
> > final protected void getEye(){return eye;}
> > }
> >
> > class Child extends Parent{
> > // for illustration; explicitly declared (and explicitly calls super()
> > )
> > public Child(){
> > super(); // will throw an NPE (in doStuff() ); eye is not
> > initialised yet
> > }
> > public void doStuff(){
> > super.doStuff(); // nice try, but doesn't help here
> > getEye().getColour(); // getEye() will return null when called by
> > Parent's constructor
> > }
> > }
> >
> > Regards - Cemal
> > http://jWeekend.co.uk jWeekend.co.uk
> >
> >
> >
> > igor.vaynberg wrote:
> >>
> >> On 11/3/07, Al Maw <[EMAIL PROTECTED]> wrote:
> >>> There's nothing to stop you making your constructor call methods to
> >>> initialise things that people can then override.
> >>
> >> erm. really? while there is nothing stopping you, you clearly shouldnt...
> >>
> >> -igor
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Jira-issue-moved-to-the-list%3A-constructors-and-init-of-components-tf4743674.html#a13569202
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]