2010-09-28 3 views
1

Я создал файл проекта/класса в Eclipse Helios, используя JDK1.6. Я позволил затмению генерировать код для класса реализации интерфейса.@Override Snafu

public interface Foo { 
    void bar(); 
} 

public class FooImpl implements Foo { 
    @Override 
    public void bar() { 
    } 
} 

Пока все хорошо. Теперь по какой-то причине я импортировал проект в Eclipse, который имеет JDK 1.5, и я вижу сообщение об ошибке The method bar() of type FooImpl must override a superclass method с быстрым исправлением до . Удалите аннотацию @Override.

После поиска в Интернете, я узнал, что есть что-то вроде OVERRIDE_SNAUF - где 6.0 Java-компилятор был обновлен, чтобы позволить @Override реализовать реализации интерфейса.

+0

Я не специалист по Java, но вы не переопределяете методы, так как интерфейс не обеспечивает реализацию, но, я думаю, вы поняли это сами. Тогда в чем вопрос? Просто вслух? – Novikov

+1

В чем вопрос? Как получить согласованное поведение между Java 6 и Java 5. Возможно, проверьте http://stackoverflow.com/questions/2135975/can-i-get-java-5-to-ignore-override-errors. Но почему вы используете Java 5? –

ответ

1

@Override подходит для Проверка синтаксиса переопределения на этапе компиляции, поэтому он также применяется к интерфейсу по той же причине, на мой взгляд.

+3

Он также ссылается на javadoc определения метода в интерфейсе, поэтому javadoc не нужно копировать. Yay для СУХОЙ! – oksayt

1

Невозможно найти вопрос, но - да, вы правы, аннотации @Override не разрешалось аннотировать переопределенные методы интерфейса в Java 5. Поэтому вам нужно будет удалить эти аннотации, если вы хотите скомпилировать код с Java 5.

0

Вы можете установить параметры компилятора на уровень соответствия 1.5, даже если у вас есть jdk 1.6. Таким образом, код, созданный eclipse, будет совместим с java 1.5 (он не будет добавлять аннотацию @Override для методов, реализующих интерфейс). Я думаю, вы действительно можете установить его, чтобы никогда не добавлять аннотацию @Override.

Ну, на самом деле это немного сложнее, чем это. Для полной совместимости вы должны установить как JDK 1.6, так и JDK 1.5 и установить каждый из них в качестве стандартного JDK для уровня соответствия. Это лучший способ обеспечить полную обратную совместимость вашего кода.

В окне настроек (общий или для конкретного проекта) перейдите в Java-> Compiler и установите там уровень соответствия. Также в Java-> Установленные JRE добавьте JDK 1.5, а затем в Java-> Installed JREs-> Execution Environments щелкните J2SE-1.5 и проверьте вновь установленный JDK 1.5. Это гарантирует, что eclipse будет использовать поведение компилятора, а также стандартную библиотеку, поставляемую с JDK 1.5, если ваш проект или рабочая область настроены на использование этого уровня соответствия.