我在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);
}
}
最佳答案
我会问自己,我需要一个保持状态的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标记为垃圾回收。