解決 String concatenation as argument to 'StringBuffer.append()' call 警告

問題描述

最近帶idea中老是收到下面這個警告:

Warning:(20, 16) String concatenation as argument to 'StringBuffer.append()' call

出現警告的代碼:

sb.append("<property name=\"" + group1 + "\" value=\"${" + group1+ "}\"/>\r\n");

分析原因

其實這個提示是表示方法使用不恰當,因爲StringBuffer對象的append方法目的就是做對象拼接用的,裏面再通過"+"來拼接就不得當,這是編譯器對Java的代碼規範。

解決方案

1. 全部使用append方法

替換+號爲).append(

因爲append方法的返回值還是StringBuffer,所以可以鏈式調用,我們可以通過鏈式調用來替換掉裏面的加號。
也就是,將:

sb.append("<property name=\"" + group1 + "\" value=\"${" + group1+ "}\"/>\r\n");

替換成:

sb.append("<property name=\"").append(group1).append("\" value=\"${").append(group1).append("}\"/>\r\n");

使用IDE的查找替換功能進行替換

當然,手動替換可能有些繁瑣,需要使用查找替換功能,

  1. 查找:+
  2. 替換爲:).append(即可。

寫代碼實現替換

核心代碼如下:

/**
 * 把StringBuffer或StringBuilder中的字符串連接符<code>+</code>替換append()方法
 *
 * @return 替換後的字符串.
 */
public String StringConnectorToAppend(String stringBufferAppendCode) {
    String returnValue = "// " + stringBufferAppendCode + "\n";
    return returnValue + stringBufferAppendCode.replaceAll("\\s*\\+\\s*", ").append(");
}

2. 忽略

這個不替換也能運行,而且替換後代碼長度變長了,不好閱讀,可以選擇忽略.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章