Javaの悪いところではあるのだが、Javaはリソースを自動で閉じてくれない。それをちゃんと知らないバイト感覚のプログラマーがリソースを扱うと残念なコードになる。また、リソースを開いた際に発生する例外をメソッドに付与しているため、例外が発生してもリソースを閉じてくれないという残念なコード。
public String Read_CSV_File (String FileName) throws IOException { File CSV_File = new File(FileName); StringBuffer sb = new StringBuffer(); BufferedReader reader = new BufferedReader ( new FileReader(CSV_File)); while (reader.ready()) { // 何らかの処理 } return sb.toString(); }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
GC(ガベージコレクタ)を過信した結果ですね。C#でも同じ。
別に例外投げっぱでもいいので、finally で拾ってくれれば。 大規模で低レベルな人がいる場合は、こういう閉じる概念があるものには絶対に直接触れさせないのが鉄則ですね。ただ普通の人でもとじ忘れはよくあるので、閉じる操作があるものは、普段使いには向いてないと思います。
最近finallyを本気で知らない人が結構いて驚く。
大規模で低レベルな人がいる場合は、こういう閉じる概念があるものには絶対に直接触れさせない。
そうそう。
ただ、相手がバッチになるとそうも行きづらいっすよね。 IN / OUTする対象が多種多様すぎて、共通機能やFWの層で隠蔽するには裾野が広すぎて、必ず漏れる。。
例えば一口に「ファイル」と言っても論理的な構造やら文字コード、えとせえとせ
pythonのwith文のような仕組みとか、デコレータのような仕組みはJavaには無いのでしょうか。
コメント投稿には、twitter認証が必要です。
Twitter認証
最近どっかの有名OSSでこのバグが発生していた記憶がw 他の言語からJavaに来るとつまづきやすいところですね。