2010-03-15 65 views
4

我使用eclipse,當我使用快捷方式來生成覆蓋實現,那裏有一個覆蓋註釋,我使用JDK 6,這是沒問題的,但在JDK 5下,這個註釋會導致錯誤,所以我想問,如果這個註釋是完全無用的?編譯器會使用這個註釋來做某種優化嗎?IDE的自動生成的@override註釋有什麼好處?

回答

3

正如其他人所指出的那樣,@Override註釋是一個真正的編譯器指令,指示javac尖叫如果與@Override註釋的方法實際上並不在它的父類覆蓋的方法(例如,你實際上是因爲你決定改變方法簽名或者拼錯方法名稱)。

JDK 5,直接實現從界面的方法是不考慮重寫該方法,如果標註了@Override被認爲是一個錯誤。

在某種程度上,由於用戶的反饋,這是一個非常混亂的行爲,JDK 6改變這種行爲,並認爲這是正確標註你從一個接口@Override實現的方法。

+0

是的,僅當實現接口方法時纔會出現該錯誤。 – Sawyer 2010-03-15 14:51:58

3

該註釋非常有價值,因爲它會使新方法確實或不覆蓋父類的方法。例如,你可能會認爲你重寫了,但是你拼錯了方法名(或者重寫的方法的簽名在此期間改變了)。

3

這不是無用的。它有助於讀者理解代碼和作者以避免錯誤。

也就是說,JDK 5和JDK 6的行爲與@Override不同,因此如果它們導致問題,請將其刪除。他們絕對沒有功能上的差異。

4

它的目的是讓編譯器能夠告訴你何時該方法實際上並不覆蓋超類方法。例如,假設拼錯了名稱,編譯器會提示您該方法沒有覆蓋任何內容,因此您將能夠捕獲錯誤,而不是運行程序,也不理解爲什麼您的方法永遠不會獲取調用。

2

針對您將要部署到的JDK編譯代碼。

問題在於,註解對於從版本6中的接口中定義的基類和方法重寫方法有效,但僅針對版本5中的重寫方法。因此,在接口中定義的方法上的@override將導致您的在JDK錯誤5