0

众所周知

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 ) 提供替代方案varargsoverloading

    LOGGER.debug("The parameter p1 cannot be {} , it must be between {} and {}", 
             p1, P1_MIN, P1_MAX);

这看起来更干净,但是有一个Object array创建来传递可变数量的参数。

这个对象数组的创建有多昂贵?它的成本是否超过了减少代码行数的优势?

我怀疑这些varargs/formatter基于方法的创建正是为了解决上述样板问题,因此即使专家的主观回答会帮助大量的程序员。此外,恕我直言,对象数组的创建是否非常便宜(这是我的希望)或非常昂贵也不是主观的。

4

0 回答 0