2010-09-01 65 views
9

我使用的是JDK1.6。當我實現一個接口並在實現類中時,如果我在函數名稱前面給出@override,那麼Eclipse將引發編譯錯誤。即根據Eclipse,下面的代碼是錯誤的。@覆蓋JDK 1.6中的註釋

public class SomeListener implements ServletContextListener { 
    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
     // code 
    } 
    /* other overridden methods here */ 
} 

如果我刪除@Override註釋,則代碼編譯正常。這是否意味着JDK1.6不需要我們在@override註釋的前綴呢?

+1

什麼,具體而言,是錯誤日食給你? – nos 2010-09-01 14:23:34

+1

你絕對肯定你實際上覆蓋了這個方法而不是重載它? – 2010-09-01 14:24:07

+0

Eclipse的錯誤消息:OgnlListener類型的方法contextDestroyed(ServletContextEvent)必須重寫超類方法 – Veera 2010-09-01 14:28:27

回答

27

您可能需要在eclipse中設置編譯器合規性級別。這可以在窗口 - >首選項 - > Java->編譯器中找到。

如果編譯器偏好設置仍然設置爲1.5,編譯器將會在覆蓋註釋上劃掉。

編輯:如果您已將其設置爲默認值以外的其他值,請檢查每個項目的編譯器合規性級別。

+0

+1:我剛剛被這個燒傷了。顯然,使用Eclipse的同事中有一個將他的項目設置爲1.6,儘管Maven將編譯器版本設置爲1.5(並且我使用m2e將它作爲Maven項目導入...)。 – Powerlord 2012-05-03 15:31:18

+0

在我的情況下,這是因爲在pom.xml中,對於maven構建,插件maven-compiler-plugin被配置爲適用於1.5版本的java源代碼和目標。改變它的值,以下面的固定它: org.apache.maven.plugins 行家編譯-插件 2.3.2 <結構> 1.6 1.6 2013-06-27 07:42:07

0

JDK1.6肯定支持它。我不知道你爲什麼會遇到問題。

你看到了什麼錯誤?我能想到的唯一事情就是確保在項目設置中使用正確的JDK。也許你正在編譯一個較老的JDK?

+0

這應該是對問題的評論。 – 2010-09-01 14:28:47

0

否仍使用@Override註釋。您應該檢查contextDestroyed方法確實存在於ServletContextListener接口中,並檢查此接口的導入包。

0

這聽起來像你的編譯器設置爲Java 5中,當接口@Override是不允許的。

2

Java編譯器設置可以根據配置在多個位置選擇, 一種方法是Window-> Preferences-> Java-> Compiler,如果將其設置爲較早的版本,則將其更改爲1.6最小值。 另一種方法是右鍵單擊Project-> Properties - > Java Compiler - > JDK Compliance - >選擇JDK1.6最低值,點擊apply。

完成更改後,讓項目生成,生成並使更改生效。

如果以上選項都不起作用 - 嘗試將rt.jar添加到類路徑中,它將解決問題。

1

在Java 1.6版本中更改了@Override註釋。 在Java 1.5中,編譯器不允許在實現的接口方法上使用@Override註釋,它從1.6開始。

Java Compiler

您必須在性能項目改變Java編譯器版本 - > Java編譯器