2016-04-17 7 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?

Я спрашиваю, потому что иногда, когда я расширяю классы, я случайно переопределяю родительские методы, потому что у них есть имена, похожие на те, которые я бы создал (например, .paint() в Swing).

+1

Ваша IDE может сказать вам, когда это произойдет, и автоматически исправить весь метод, который мог бы иметь '@ Override', но нет. –

+1

«Не ссылаясь на абстрактные методы» О, но вы должны быть, если он переопределяет метод в «BaseClass». –

+0

[Ошибка ошибки Google] (http://errorprone.info/bugpattern/MissingOverride) проверяет, чтобы это требовало их во время компиляции. –

ответ

2

Компилятор Java явно не принудительно использует аннотацию @Override. Для этого можно было бы отказаться от обратной совместимости с кодом pre-Java5.

Однако инструменты статического анализа могут обеспечить именно то, что вы хотите. В основном я использую checkstyle для принудительного использования @Override. Он имеет явный rule для использования @Override и может быть интегрирован во все стандартные инструменты Java-сборки - Maven, Gradle и т. Д.

+0

Благодаря! Я не понимал, что @Override не во всех версиях Java (что объясняет, почему это необязательная аннотация) –

+0

Похоже, что checkstyle может принудительно использовать '@ Override', только если метод переопределения имеет javadoc с' {@inheritDoc} ' тег :( – fRoStBiT

Смежные вопросы