2017-03-28 6 views
0

WebアプリケーションのHandlerクラスに静的なStringWriter変数があり、クラスの複数のプライベートメソッドで使用されています。各メソッドはこの変数にStringを追加し、最後にStringWriterは連結されたStringをfileに書き込みます。 しかし、Webアプリケーションをテストしている間、私はStringWriterがこれまでのすべてのテストの値を保持していることに気付きました。この問題(How do you "empty" a StringWriter in Java?)の回答を回避策として使用しましたが、これは設計パターンとセキュリティの面では正しくないと感じています。Webアプリケーションで静的なStringWriterを使用する正しい方法は何ですか?

正しいですか?より良い方法がありますか?

public class BaseHandler { 
    private static StringWriter sw = new StringWriter(); 

    public static void writeToFile(){ 
     firstMethod(); 
     secondMethod(); 
     finalMethod(); 
    } 
    private static void firstMethod(){ 
     sw.append("Pandora's"); 
    } 

    private static void secondMethod(){ 
     sw.append("Box"); 
    } 

    private static void finalMethod(){ 
     sw.append("!"); 
     //sw writes value to file 
     ... 
     sw.getBuffer().setLength(0); 
    } 
} 
+0

まず、静的であってはなりません。これは_why_静的可変変数は悪です。 –

答えて

1

状態を保持するBaseHandlerが必要ですか?あなたのハンドラはswフィールドに状態を保持していますが、この状態が必要ない場合はフィールドを作成しません。

たとえば、あなたがこれを行うことができます。

​​

の終了WRITETOFILEにStringWriterは、ガベージコレクションのためにマークされています。

+0

ありがとう:)私の質問はちょうど今やばかげているようです。 – Ray

関連する問題