java - 带有惰性求值的 String.format

标签 java logging lazy-evaluation

我需要类似于 String.format(...) 的东西方法,但具有惰性评估。

此lazyFormat 方法应返回某个对象,其toString() 方法将评估格式模式。

我怀疑有人已经这样做了。这在任何库中都可用吗?

我想替换这个(记录器是 log4j 实例):

if(logger.isDebugEnabled() ) {
   logger.debug(String.format("some texts %s with patterns %s", object1, object2));
}

用这个:

logger.debug(lazyFormat("some texts %s with patterns %s", object1, object2));

仅当启用调试日志记录时,我才需要lazyFormat 来格式化字符串。

最佳答案

如果您正在寻找“简单”的解决方案:

 public class LazyFormat {

    public static void main(String[] args) {
        Object o = lazyFormat("some texts %s with patterns %s", "looong string", "another loooong string");
        System.out.println(o);
    }

    private static Object lazyFormat(final String s, final Object... o) {
        return new Object() {
            @Override
            public String toString() {
                return String.format(s,o);
            }
        };
    }
}

输出:

some texts looong string with patterns another loooong string

如果你愿意,当然可以在lazyFormat 中添加任何isDebugEnabled() 语句。

关于java - 带有惰性求值的 String.format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/943367/

相关文章:

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?

windows - 何时登录 Windows 事件日志?

ruby-on-rails - rails |如何在生产中查看实时服务器日志?

java - Log4j2 RollingFileManager OnStartupTriggeringPolicy 从不在启动时滚动文件

java - Java中长乘法的高位?

java - 如何在不删除旧字符串文本的情况下向字符串添加新文本?

initialization - 编写一个在初始化程序中提供自引用的 Kotlin util 函数

rust - Once_cell的异步版本,或者避免错误的方法[E0744] : `.await` is not allowed in a `static` ?

scala - 计算完惰性值后,垃圾回收对象

java - 为什么编译器不推断泛型中的捕获关系?