2016-04-17 51 views
1

有沒有辦法強制使用@Override註解?我可以強制顯式使用@Override嗎?

只是爲了澄清,我不是問「我怎麼強制子類實現的方法」(如this):

public abstract class BaseClass { 
    public abstract void foo(); 
} 

我問有關此方案具體爲:

public class AnnotatedSubclass extends BaseClass { 
    @Override 
    public void foo() { 
     System.out.println("I have @Override."); 
    } 
} 

public class NonAnnotatedSubclass extends BaseClass { 
    public void foo() { 
     System.out.println("I do not have @Override."); 
    } 
} 

請注意,儘管NonAnnotatedSubclass沒有明確的@Override註釋,但兩者都可以編譯。有沒有辦法讓編譯器在NonAnnotatedSubclass的情況下拋出錯誤/警告?

我問,因爲有時當我擴展類時,我意外地覆蓋父方法,因爲它們的名稱與我將創建的名稱類似(例如Swing中的.paint())。

+1

你的IDE可以告訴你什麼時候發生這種情況,並自動修復所有可能有'@ @重寫「,但不要。 –

+1

「'不是指抽象方法」哦,但你應該是,如果它覆蓋'BaseClass'中的方法。 –

+0

[Google的errorprone](http://errorprone.info/bugpattern/MissingOverride)對此進行檢查,以便在編譯時需要它們。 –

回答

2

Java編譯器沒有明確強制使用@Override註釋。這樣做會破壞與Java5之前的代碼的向後兼容性。

但是,靜態分析工具可以強制執行你想要的東西。我主要使用checkstyle來強制使用@Override。它有一個明確的rule使用@Override,它可以集成到所有標準的Java構建工具 - Maven,Gradle等。

+0

謝謝!我沒有意識到@Override不是所有版本的Java(這解釋了爲什麼它是一個可選的註釋) –

+0

看起來像checkstyle只有在重寫方法的javadoc帶有{@inheritDoc}時才能強制執行'@ Override'標籤 :( – fRoStBiT

相關問題