众所周知
LOGGER.debug("The parameter p1 cannot be " + p1 +
", it must be between " + P1_MIN + " and " + P1_MAX);
即使由于记录器设置而导致结果被丢弃,但仍然存在字符串连接的缺点。为避免这种情况,以下样板很流行
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("The parameter p1 cannot be " + p1 +
", it must be between " + P1_MIN + " and " + P1_MAX);
}
以三条额外的线为代价避免它。
slf4j
(和其他人)使用varargs
(和overloading
)提供alternative:
LOGGER.debug("The parameter p1 cannot be {} , it must be between {} and {}",
p1, P1_MIN, P1_MAX);
这看起来更干净但是创建了Object array
来传递可变数量的参数。
这个对象数组创建的成本是多少?它的成本是否超过了减少代码行的优势?
我怀疑基于varargs/formatter
的方法是为了解决上述样板而创建的,所以尽管专家的一些主观回答会帮助很多程序员。此外,恕我直言,如果对象数组创建要么非常便宜(这是我的希望),要么非常昂贵,这不是主观的。