我有下面的类:
class Bla {
private static final Consumer<String> OUTPUT = System.out::println;
public void print() {
printStuff(OUTPUT);
}
public void printStuff(Consumer<String> consumer) {
consumer.accept("Bla");
}
}
试验代码:
Bla bla = new Bla();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
final PrintStream standardOut = System.out;
System.setOut(new PrintStream(baos));
bla.print();
LOG.info(baos.toString().trim()); <-- This does not work
System.setOut(standardOut);
它什么都不记录。为什么?当我内联OUTPUT时,它就工作了。
1条答案
按热度按时间qojgxg4l1#
问题在于,当
Bla
类初始化时,它在那个时间点 * 引用System.out
*。当您在后续代码中重置System.out
时,它对Bla.OUTPUT
的值没有影响。我想这会达到你的目的:
因为它将总是使用
System.out
的当前值。