4

私は次のインターフェースを持っています:

public interface Translator
{
    public <T, F> T translate(F from, T to, Class<T> clazz); 
}

および次の実装:

class TranslatorImpl implements Translator
{
    @Override
    public <T, F> T translate(F from, T to, Class<T> clazz)
    {
        //some code
    }
}

しかしtranslate()、クラスのメソッドについてはTranslatorImpl、Eclipse は次のように文句を言います。

名前の衝突: TranslatorImpl 型の translate(F, T, Class) メソッドには、Translator 型の translate(F, T, Class) と同じ消去がありますが、それをオーバーライドしません。

更新: Maven ビルドを実行すると、適切にビルドされます。JDK 1.6 update 31 を使用しています。Eclipse の JDK 準拠レベルは 1.6 です。

どうすればこれを克服できますか?

更新 2:

コンプライアンス レベルの設定:ここに画像の説明を入力

インストール済みの JRE:ここに画像の説明を入力

更新 3:.classpathファイルの内容:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry combineaccessrules="false" kind="src" path="/dbmodel"/>
    <classpathentry combineaccessrules="false" kind="src" path="/uimodel"/>
    <classpathentry combineaccessrules="false" kind="src" path="/common"/>
    <classpathentry kind="var" path="MAXIMUS_DEV_DIR/resources/dependencies/java/log4j/log4j-1.2.16/log4j-1.2.16.jar"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

更新 4: プロジェクト固有のコンパイラ コンプライアンス レベル設定: ここに画像の説明を入力

4

1 に答える 1

1

以前の Java 6 @Override アノテーションは、インターフェースの実装に許可されていませんでした。これはおそらく起こっていることです。注釈を削除してみると、うまくいくはずです。適切に修正するには、Eclipse プロジェクトのプロパティでソース レベルのコンプライアンスを確認してください。

于 2012-04-14T10:02:00.667 に答える