众所周知
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
(and others)使用(and ) 提供替代方案:varargs
overloading
LOGGER.debug("The parameter p1 cannot be {} , it must be between {} and {}",
p1, P1_MIN, P1_MAX);
这看起来更干净,但是有一个Object array
创建来传递可变数量的参数。
这个对象数组的创建有多昂贵?它的成本是否超过了减少代码行数的优势?
我怀疑这些varargs/formatter
基于方法的创建正是为了解决上述样板问题,因此即使专家的主观回答会帮助大量的程序员。此外,恕我直言,对象数组的创建是否非常便宜(这是我的希望)或非常昂贵也不是主观的。