項目由於是政府的項目,須要對代碼進行安全掃描,花了點時間對代碼進行重構,因此對問題作下記錄,你們有更好的解決辦法歡迎指出,會隨時進行補充問題java
1、Either log or rethrow this exception.(日誌或從新拋出此異常。)express
處理方式:在catch中加上打印日誌設計模式
logger.error("添加的說明信息 ",e);安全
2、Remove this useless assignment to local variable "XXX".(刪除這個無用的賦值到局部變量「XXX」)session
處理方式:將這兩段代碼合併爲一列 List<String> timelist = getTimeList();less
3、This block of commented-out lines of code should be removed.(刪除這段註釋掉的代碼塊)工具
處理方式:直接將註釋的代碼刪除ui
4、Define a constant instead of duplicating this literal "repeatData" 3 times.(定義一個常量,而不是重複這個「repeatData」3次。)this
例子:在一個類裏面屢次使用了同樣的字符串文本spa
處理方式:定義類常量或者枚舉類或者接口常量類,用常量來代替重複的文本
5、duplicated blocks of code must be removed.(必須刪除重複的代碼塊。)
這類問題在代碼重構是碰到最多的
處理方式:抽取重複的代碼塊做爲一個共用的方法或者抽取工具類方法
6、Refactor this code to not nest more than 3 if/for/while/switch/try statements.(重構此代碼以不嵌套超過3 if/for/while/switch/try語句。)
這也是最多見的問題 嵌套if for過多
解決辦法:1抽取方法,
2.使用設計模式
3. 採用衛語句
7.Refactor this method to reduce its Cognitive Complexity from 48 to the 15 allowed.(重構這種方法,將其認知複雜性從48下降到15。)
表示一個方法行數不少比較複雜,一樣的解決辦法就是抽取方法,講一個方法拆分幾個方法
8.Method has 9 parameters, which is greater than 7 authorized.(方法有9個參數,大於7個受權參數。)
一個方法參數過多,解決辦法封裝成對象或者map
9、Replace the synchronized class "StringBuffer" by an unsynchronized one such as "StringBuilder".(將同步類「StringBuffer」替換爲非同步類,例如「StringBuilder」。)
其實若是用StringBuffer時 jdk也會進行鎖消除的
10、Refactor this method to throw at most one checked exception instead of: java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException(重構此方法以拋出最多一個檢查異常)
解決辦法:自定義運行時異常,或者拋出更大的異常
11、NullPointerException might be thrown as 'session' is nullable here(可能會拋出NullPointerException,由於「session」在這裏是可空的)
處理方式:加一個非空判斷
12、Close this "InputStreamReader".(關閉這個「InputStreamReader」。)
輸入輸出流在finally中進行關閉
13、Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.(添加一個嵌套註釋,解釋爲何這個方法是空的,拋出UnsupportedOperationException,或者完成這個實現。)
處理方式:由於不須要實現這個方法因此直接添加註釋解釋一下
14、Make "modelparam" transient or serializable.
頂層接口對象或者抽象類的引用是沒有實現序列化接口的,因此實體實現了系列化的時候,這些頂層接口的引用編譯時沒法肯定類型
解決方法:
15、Reduce the number of conditional operators (7) used in the expression (maximum allowed 3).
一個if的條件表達式過多問題
解決辦法提取表達式成爲一個方法
變動前:
變動後: