[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00667] Re: Java の初期化



   "arai <xnoric@xxxxxxxxxxx>"さんは書きました:

> これなら・・私は別に'1'でも'2'でも
> あまり不自然には感じませんが'1'の場所で他のメソッドを
> 呼び出し、その戻り値で初期化を行うのは非常に不快感
> を感じるのですが、皆さんはどうですか?
初期化を行うメソッドがstaticメソッドとすればよいかと。初期値をメ
ソッドから得るのはよいスタイルと思います。

class Test {
  int a = getDefaultA();

  static int getDefaultA() {
    return 111;
  }
    :
}

> クラスが初期化されていないのだからメソッドが
> 正しく動かないはずなのに、正常動作してします。
> 複雑な場合はちょっとちがいますが・・
> どのように説明すればいいのでしょうか?
staticメソッドでない場合も、必ずしも正しくないとは言えないと思い
ます。正しく動作するには多分以下の2点が条件として必要になります。
・メソッドの中で同じクラスのフィールドを参照する場合、先に初期化
されていることを設計上保証すること
・メソッドがサブクラスでオーバーライドされることを想定して設計す
るか、オーバーライドを禁止すること

これが満たされていないならば、いろいろな状況下で「正常に動作して
いる」のではなく、ある状況下で「たまたま動作している」だけではな
いでしょうか?


---
Toru TAKAHASHI

------------------------------------------------------------------------
      ★あなたのホームページに“最新ニュース”をお届け!!      
         http://ap.infoseek.co.jp/ticker2.html