私は、コンストラクタでファイルを開くクラスを持っており、メソッドの呼び出し中にファイルに書き込みます。どこでファイルを閉じるのですか? クラスはメソッドが1つしかない一般的なインターフェイスを実装しています。パブリックメソッドは追加しません。javaファイルが確実にクローズされるようにする方法
public interface I {
void makeChange();
}
public class C implements I {
FileWriter f;
PrintWriter p;
public C() {
f = new FileWriter("log.txt");
p = new PrintWriter(p);
}
@Override
public void makeChange() {
p.println("something");
p.flush();
}
}
パブリックメソッドendChanges()を追加することはできません。
また、クラスは変更がいつ終了するかを知ることができません。
私はConstructorとmakeChange()の動作を変更することを許可されています。
私はfinalize()を試みましたが、実行さえしませんでした。
EDIT。 インターフェイスIは、多くのクラスによって実装されています。 ファイルのうちのいくつかはファイルを必要としないため、closeFile()メソッドは必要ありません。
目標は、すべての実装のために同じコードの実行を作ることです。publicメソッドendChanges()
を追加できないように
public static void main(String args[]) {
I c1 = new C();
c1.makeChange();
I c2 = new D(); // D is an implementation of I that doesn't handle a file
c2.makeChange();
}
なぜあなたは 'endChanges()'を追加できません –
なぜp&f.close()をmakeChange()に追加できませんか? – developer
は、makeChange()が複数回呼び出されることを意図しています。 ?そうでなければtryと最後に囲み、そして最後にあなたは閉じることができます。 –