Loosen Constructor super()/this() call restrictions (original) (raw)

Marek Kozieł develop4lasu at gmail.com
Sun Mar 22 18:38:10 PDT 2009


2009/3/23 Mark Mahieu <markmahieu at googlemail.com>:

2009/3/23 Jeremy Manson <jeremy.manson at gmail.com>

For example, now that this() and super() can come in the middle of a constructor, are the semantics implicitly changed so that you can catch exceptions thrown by this() and super()?  Does that mean that objects can now be seen as partially initialized in sub-constructors? Ha, there's a bug entry for that one too: http://bugs.sun.com/bugdatabase/viewbug.do?bugid=4879515 Mark

this() super() work 100% correctly now days.

But maybe the thing you need is not this 'weird' behavior of constructor.

Consider new kind of method 'initializer':

class Sample{ final Foo foo; final Bar bar;

public Sample(FooBuilder foo, Bar bar){ initFoo(foo); // compiler known that foo is assigned this.bar = bar.copy(); }

public Sample(FooBuilder foo, BarBuilder bar){ initFoo(foo); // compiler known that foo is assigned initBar(bar); // compiler know that bar is assigned }

public Sample(Foo foo, BarBuilder bar){ this.foo = foo.copy(); initBar(bar); // compiler know that bar is assigned }

initializer void initFoo(FooBuilder foo){ //operations to create foo // we have foo this.foo = foo; }

initializer void initBar(BarBuilder bar){ //operations to create bar // we have bar this. bar = bar; }

}

-- Pozdrowionka. / Regards. Lasu aka Marek Kozieł

http://lasu2string.blogspot.com/



More information about the coin-dev mailing list