将System.out.println放入单独的方法是否合适?

时间:2009-08-03 16:02:47

标签: java

我正在使用一段代码,我发现有点奇怪。我正在处理的代码是导入实用程序的一部分,该实用程序接收CSV文件并将数据导入数据库。

在代码中,我看到了:

ImportUtils.printf("Validation started");

当我研究这个方法时,它只是调用System.out.println:

public static void printf(String s) {
    System.out.println(s);
}

这有什么好处吗?这可能会成为一个问题吗?

6 个答案:

答案 0 :(得分:15)

考虑切换到完整的日志API,而不是创建一个简单的System.out.println包装器。有许多可用(Commons LoggingLog4jSLF4J等等。这些可以很容易地配置为控制台周围的简单包装器,可用于初始开发。在未来的道路上,这些可以被修改为写入文件,发送电子邮件,写入数据库,......这些也提供了上下文信息(比如哪个类生成日志)非常有用,并且很难自己投入。

答案 1 :(得分:6)

强迫脱钩的典型例子。完全没有意义,因为如果你真的希望System.out写在其他地方,你可以自由地使用System.setOut()。如果您需要更多的灵活性,那么日志框架的选择并不完全可供选择。

答案 2 :(得分:5)

我认为这可能是一件好事 - 通过简单地更改ImportUtils.printf方法的实现,您可以自由地写入任何缓冲区。

有必要吗?我不知道,它可能有点矫枉过正,但这种封装往往在需要时证明是一种福音。

答案 3 :(得分:2)

该方法的名称printf不正确,因为printf代表打印格式化,而且此方法没有printf程序员知道的任何功能。

另一方面,通过允许将来增强和更新日志记录方法而不更改底层代码,此间接可能很有用。我只是不会把它称为printf

答案 4 :(得分:1)

不是Java人,但这看起来像是“你可以用任何语言编写Fortran”的典型案例,本案例为C.

我看到的唯一优势是让C程序员在API中处于领先地位。如果该方法被称为“DisplayText”或相关的东西,我可以看到它有一些价值。

答案 5 :(得分:1)

我认为有人试图变得聪明,并且很容易在开发周期的后期更改为日志框架工作。

问题在于,此时您将调用更改为system.out。对于日志记录框架,所有日志记录调用都来自同一个类和相同的函数,它们都具有相同的优先级。这意味着您放弃了记录器自动提供的许多有用功能。就像看哪个类写日志消息一样。将调试器设置为更高的日志级别以仅获取最重要的消息等。

所以我会建议不要这样做。从system.out快速更改看起来是个不错的主意。记录器或更复杂的东西,但从长远来看它没有用。