Set<Map.Entry<String, SSGSession>> theSet = new TreeSet<Map.Entry<String, SSGSession>>(new Comparator<Map.Entry<String, SSGSession>>() {
@Override
public int compare(final Map.Entry<String, SSGSession> e1, final Map.Entry<String, SSGSession> e2) {
return e2.getValue().getStartTime().compareTo(e1.getValue().getStartTime());
}
}));
觸發聲納違反,跳閘FindBugs的規則「SIC_INNER_SHOULD_BE_STATIC_ANON」,其具有的描述:
該類是一個內部類,但不會將其嵌入的參考 用於創建它的對象。此參考使類的實例更大,並且可能會將創建者對象 的引用保留更長的時間。如果可能的話,應該將課程設爲 爲靜態內部類。由於匿名內部類不能被標記爲靜態的 ,因此這將需要重構內部類 ,以便它是一個命名的內部類。
真的嗎?這不是很挑剔嗎?我是否應該真正重構匿名內部類中的單行方法以節省額外引用的成本?在這種情況下,它不可能將參考持續時間超過必要的時間。
我不介意這樣做,因爲我們強制執行的編碼標準是「零聲納違規」,但我強烈地試圖在這裏爭辯//NOSONAR
的情況,因爲imho將一行方法提取到靜態內部使得代碼稍微難以溝通。
java純粹主義者認爲什麼?
由於該類是無狀態的,因此可以更好地將比較器聲明爲「靜態final」,對所有調用使用相同的實例,而不是每次都創建一個新的實例。 –
靜態代碼分析工具的目的不是挑剔嗎?對此抱怨有明確的技術理由。如果您不希望某些項目使用該規則,請禁用該規則。 – hyde
...繼續下去,即使在某些情況下某些規則的應用似乎沒有必要,但我會採取立場,即禁用該規則的規則需要一個* strong *原因,但這不夠強。禁用整個規則,或遵循它。 – hyde