タグ

apiとtrapに関するkiyo_hikoのブックマーク (1)

  • JavaのFileクラスは不変(immutable)クラスという点に関する注意点 - 達人プログラマーを目指して

    長年Javaを書いてきた人間としてはちょっと情けないことに、先日、会社で自分の書いたコードが原因でちょっとしたバグを出してしまいました。きちんとテストファーストで単体試験は書いていたのですがテストが不十分でしたね。 バグの原因は、Fileクラスの仕様をちょっと勘違いして使っていたことが原因でした。FileクラスにはrenameTo()というメソッドがあって、このメソッドの呼び出しにより、操作が成功すればもともとFileクラスのオブジェクトに対応していたファイルの名前がファイルシステム上で変更されます。ここで、うっかり、Fileクラスが可変なクラスだと勘違いしてしまっていたのですが、実は、Java Docにも明記されている通り、Fileクラスは不変(immutable)なクラスであり、一度生成したら状態が決して変更されることがない設計となっています。これは、以下のテストケースを見ると確認でき

    JavaのFileクラスは不変(immutable)クラスという点に関する注意点 - 達人プログラマーを目指して
    kiyo_hiko
    kiyo_hiko 2011/07/13
    JavaのFileクラスはimmutableで、renameToを使って実体ファイル名を変更しても、Fileクラスが持っている名前は変わらんという話。参照先がなくてもFileオブジェクトを参照できる仕様を考えれば不自然はないけど注意したいところ
  • 1