我在编程时使用System.out.println()(sout)进行调试和一般状态概述(这对网络内容特别有用)。既然我希望我的代码在最后有效,有没有办法告诉java编译器忽略souts?
我已经尝试了一些谷歌搜索,但解决方案非常不满意,比如将所有的声音放在带有全局变量的if中。 (如果需要大量的消息,那么行数增加三倍并使代码变得非常难以理解)
任何人都知道是否存在这样的编译器选项(如果不存在,为什么不存在?),或者如果还有其他更优雅的解决方案,那么上面提到的那个。谢谢你的答案:)
答案 0 :(得分:4)
使用logging。您可以指示通常不会显示的日志级别,并且可以显示日志记录属性。这可以通过控制等方式完成。
Logger.getLogger(getClass().getName()).log(Level.FINE, "...");
实际上,日志记录有很多示例和方面。因此,如果您希望您的代码简约而成熟,请使用日志记录。
另一种方法是使用单元测试,并且不在生产代码中输出。这需要更严格,并允许查找回归错误。
第三种选择是更自由地使用(未选中)例外,IllegalArgumentException,IllegalStateException。提供信息快速失败。
答案 1 :(得分:3)
首先,我想说这个问题的真正答案是使用其他人已经显示的日志框架。
但是如果您致力于使用System.out,您仍然可以达到预期的效果。在下面的类中,我将System.out
(通过使用System.setOut
方法)更改为另一个实际上不打印任何内容的PrintStream。
import java.io.*;
class Sys
{
public static void main ( String [ ] args ){
System.setOut(new PrintStream(new OutputStream(){
@Override
public void write(int b){
}
}));
System.out.println("Hello World!");
}
}
我的答案可以改进。例如,它仍然会将对象转换为字符串以进行打印,但您可以通过设置一个完全没有任何内容的覆盖PrintStream类来解决这个问题。
但是你对它的改进越多,你就越多地实现了其他人已经完成的日志记录实用程序。这就是为什么我建议记录是真正的答案。