我经常听到人们说这是避免字符串连接并在记录时使用{}的最佳实践之一.
我正在研究Log4j代码,以了解他们如何处理此问题并发现他们正在做类似的事情.
这是format()方法的代码片段,该代码采用模式和参数并返回要记录的消息.
/**
* Formats arguments using SLF4J-like formatter.
* @param pattern pattern, may be malformed.
* @param arguments arguments.
* @return Message string
*/
private static String format(final String pattern,
final Object[] arguments) {
if (pattern != null) {
String retval = "";
int count = 0;
int prev = 0;
int pos = pattern.indexOf("{");
while(pos >= 0) {
if (pos == 0 || pattern.charAt(pos-1) != '\') {
retval += pattern.substring(prev, pos);
if (pos + 1 < pattern.length() && pattern.charAt(pos+1) == '}') {
if(arguments != null && count < arguments.length) {
retval += arguments[count++];
} else {
retval += "{}";
}
prev = pos + 2;
} else {
retval += "{";
prev = pos + 1;
}
} else {
retval += pattern.substring(prev, pos - 1) + "{";
prev = pos + 1;
}
pos = pattern.indexOf("{", prev);
}
return retval + pattern.substring(prev);
}
return null;
}
我不明白这种实现比使用串联更好.任何对此的见解将非常有帮助.