2014-07-12 38 views
2

我只是用聲納開始,我有JDK 8項目到目前爲止,我得到的唯一的問題是:聲納規則 - 重新排序爲界面的默認方法改性

Reorder the modifiers to comply with the Java Language Specification. 

這是發生我默認方法接口,像

default boolean isValid([params here]) { 
    /*method body here*/ 
} 

我知道,這實在是一個小問題,但我不希望禁用任何規則,那麼你如何解決這個問題?

非常感謝!

p.s.我在Google上沒有找到任何東西,我知道這條規則的含義(我已閱讀其描述),但我無法弄清楚如何處理默認關鍵字。

更新:它看起來像一個錯誤,我在這裏報道它,https://jira.codehaus.org/browse/SONARJAVA-590 更新2:看來它已經固定,它會在2.4版本中提供。

+0

您使用的是哪種版本的聲納?你確定它支持Java 8嗎? – Eran

+0

我使用Sonar 4.3.2和Java插件2.3。我還使用Maven插件Sonar的相同版本2.3版本進行覆蓋。所以是的,我確定支持Java 8。 –

+0

儘管你說了什麼,我懷疑你可能正在處理一個不支持Java 8的版本。否則,這不僅是一個錯誤,而且是完全的和絕對的廢話。 * [*語言規範](http://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.4)中沒有修飾符的順序。它們可以按任何順序發生。 – EJP

回答

5

接口的方法聲明語法包含在JLS, section 9.4中。

簡而言之,方法修飾符必須位於方法頭之前,其中包括方法的返回類型。你的聲明有一個方法修改default和它的返回類型是boolean所以在這個聲明之外沒有其他可能的安排比

default boolean isValid(/*parameters*/) { /*body*/ } 

所以我想,這一定是聲納的錯誤。

+0

謝謝你的回答,我會接受它,因爲它似乎是唯一合乎邏輯的解釋。我也報告了這個bug,看到更新後的問題:) –

+0

@SilviuBurcea非常感謝你提交Sonar bug。 –

2

嗨,感謝您的反饋。

你可以看看檢查的源代碼:ModifiersOrderCheck(鏈接到最後提交在寫作時)

而且你會看到default修改未選中的這條規則,因爲沒有更新了在sonar-java-plugin中支持Java 8。

所以它確實是一個bug,但它必須在java插件項目上報告,而不是在Mojo的sonar maven插件上報告。我創建了正確的票:https://jira.codehaus.org/browse/SONARJAVA-590隨時爲它投票。

+0

我沒有權利在SONARJAVA項目中提交錯誤。對不起。 –

+1

沒問題!更好的報告比沒有報告好:) – benzonico