2011/01/12(水)この会社辞めようと思ったソースコード
2011/01/12 24:37
正常に起動したりしなかったりする画面がありまして、その画面の調査をしていました。思いっきり簡略化してしまうと以下のようなソースになっています。
public class Child extends Parent {
private Foo foo = new Foo();
public Child(String s) {
super(s);
}
public void bar(){
this.foo.method();
}
}
これは手順書に書かれているとおりの記述であり、特に問題はないように思えました。同じチームの人に指摘されて、基盤部分のParentクラスのソースを見るまでは。
public class Parent {
public Parent(String s) {
:
:
this.bar();
}
public void bar() {}
}
つまり、コンストラクタが完全には終わっていないため、Childクラスのbar()が呼ばれた時点でfooが初期化されているかどうかは運任せ! こんなハイリスクノーリターンなギャンブルをやる必要があるのかよ!
……というか、見つけた人はよく気づいたな。