2011-04-25 102 views
26

我使用的Checkstyle和我得到這個方法的錯誤:錯誤地發出Checkstyle「方法不適用於擴展」錯誤?

public final String getAdmitCodeStatus() { 
    return admitCodeStatus; 
} 

這是我得到的錯誤:

法「getAdmitCodeStatus」沒有設計爲可擴展 - 必須是抽象的,最終的或空的。

該方法不符合?有什麼我做錯了,Checkstyle會對我說這個方法嗎?

+0

您是否有另一個getAdmitCodeStatus實例違反該規則?例如,是否有一個基類用非空的實體來實現該方法? – 2011-04-25 15:51:09

+0

你能否讓課程成爲最後一課,看看它是否會消失(如果你的課程確實可以成爲最終課程)? – CoolBeans 2011-04-25 15:52:35

+0

@Chris:好主意,但我不知道。我只是做了一個搜索,以確保我沒有其他方法分享這個名字。 – McGlone 2011-04-25 16:14:20

回答

26

它看起來是由DesignForExtension規則引起的。根據the documentation

檢查類是否被設計用於擴展。更具體地說, 實施了一種編程風格,其中超類提供可以由子類實現的空的「掛鉤」 。

確切的規則是類, 可以被子類的非專用,非靜態方法必須是

abstract or 
final or 
have an empty implementation 

理由:該API的設計風格保護超對beeing 子類打破。缺點是子類的靈活性受限於 ,特別是它們不能阻止在超類中執行代碼 ,但這也意味着子類不能通過忘記調用超級方法來破壞超類的狀態。

來源:http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html

但你既是方法有final改性劑,我說你發現了一個bug,可能要記錄一個錯誤報告。 https://github.com/checkstyle/checkstyle/issues

+5

-1這是如何回答這個問題的? – 2013-10-16 14:01:18

+0

@Chris你是對的。我修改了我的答案,表明它並沒有真正回答OP的問題。 – Snekse 2014-01-17 21:46:06

0

乍一看它看起來像在地球上一種編程風格,這是什麼......這 檢查只是無論您是刨的方法來被繼承或不...然後你可以宣佈他們final,abstract or empty implementation. 然後你聲明它最終...;) 類可以是最終的或方法個人取決於需求方案。

+0

這似乎沒有回答這個問題。 OP正在宣佈他的方法是最終的,這似乎滿足了規則,他正在尋找一個解釋爲什麼他仍然得到錯誤。 – 2013-10-16 14:19:43

+0

這是我的壞Nathan! 我沒有正確閱讀。 我也是新來的,所以我請求你的赦免,並且在從現在開始張貼時要多加小心。 謝謝! :) – 2013-10-16 17:48:52

+0

不用擔心,誤讀問題很容易做到,我一直這麼做。 – 2013-10-16 17:55:34

0

我認爲這個檢查是有用的,大多數時候警告是合理的。有時它不合適,然後我忽略它。