【问题标题】:What is correct way to use a static StringWriter in a web application?在 Web 应用程序中使用静态 StringWriter 的正确方法是什么?
【发布时间】:2017-03-28 19:35:30
【问题描述】:

我在 Web 应用程序的 Handler 类中有一个静态 StringWriter 变量,由该类中的多个私有方法使用。每个方法都将一个字符串附加到此变量,最后 StringWriter 将连接的字符串写入文件。 但是在测试 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);
    }
}

【问题讨论】:

  • 首先:它不应该是静态的。这就是为什么静态可变变量是邪恶的。

标签: java web-applications stringwriter


【解决方案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 被标记为垃圾回收。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 2014-09-01
    • 2021-04-18
    • 2019-03-31
    • 2013-11-06
    • 2014-10-28
    • 1970-01-01
    • 2018-08-08
    相关资源
    最近更新 更多