我需要类似于 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/