在Web应用程序中使用静态StringWriter的正确方法是什么?

时间:2017-03-28 19:35:30

标签: java web-applications stringwriter

我在Web应用程序的Handler类中有一个静态StringWriter变量,由类中的多个私有方法使用。每个方法都将一个String附加到此变量,最后StringWriter将连接的String写入文件。 但是在测试Web应用程序时,我意识到StringWriter仍然保留了之前所有测试中的值。我使用了这个问题的答案(How do you "empty" a StringWriter in Java?)作为解决方法,但我觉得这在设计模式和安全性方面不正确。

这是对的吗?还有更好的方法吗?

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);
    }
}

1 个答案:

答案 0 :(得分:1)

我会问自己,我需要一个持有状态的BaseHandler吗?现在您的处理程序在sw字段中保持状态,但如果您不需要此状态,则不创建字段。

例如,你可以这样做:

public class BaseHandler {


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

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

    private static void finalMethod(StringWriter sw){
        sw.append("!");
        //sw writes value to file
        ...
    }
}

退出writeToFile,StringWriter被标记为垃圾收集。