Loosen Constructor super()/this() call restrictions
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/view_bug.do?bug_id=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':
- Can be executed only in constructors.
- Can assign value to final fields, only condition is to assign it always.
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