2012-04-14 12 views
4

Ich habe die folgende Schnittstelle:Sonderbare Erasure in Java Generics

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

und die folgende Implementierung:

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

Aber für die translate() Methode in der TranslatorImpl Klasse rügt Eclipse-wie folgt:

Name Konflikt: Die Methode übersetzen (F, T, Klasse) des Typs Tr anslatorImpl hat die gleiche Lösch wie translate (F, T, Klasse) vom Typ Übersetzer aber enthebt nicht

Update: Als ich ein Maven bauen tun richtig baut. Ich benutze JDK 1.6 Update 31. Die JDK Compliance Level in Eclipse ist 1.6

Wie überwinde ich das?

Update 2:

Compliance-Level-Einstellungen: enter image description here

JRE installiert: enter image description here

Update 3: Inhalt meiner .classpath Datei:

<?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> 

Update 4: projektspezifische Compiler Konformitätsstufeneinstellungen: enter image description here

+2

Funktioniert wie es für mich sollte. Welchen Compiler benutzen Sie? – Joni

+0

Sie benötigen den dritten Parameter nicht, es sei denn, Sie möchten null als zweiten Parameter angeben. – EJP

+0

Es ist Eclipse, die die Probleme verursacht. Wenn ich einen Maven Build mache, baut es sich richtig auf. Ich benutze JDK 1.6 Update 31. Die JDK Compliance Level in Eclipse ist 1.6 –

Antwort

1

Vorherige Java 6 @Override-Annotation war zum Implementieren von Schnittstellen nicht zulässig, dies ist wahrscheinlich der Fall. Sie können versuchen, die Anmerkung zu entfernen, und es sollte funktionieren. Um die Kompatibilität der Quell-Level in den Eigenschaften des Eclipse-Projekts zu überprüfen, müssen Sie die Fehler beheben.

+0

Ich verwende JDK 1.6. Eclipse 3.7. Compiler Compliance Level: 1.6 –

+0

Quelle oder Binär? Auf dem Projekt oder Eclipse breit? Bitte seien Sie sehr genau, wie Sie wissen, dass Complience 1.6 ist. – hgrey

+0

@hgrey ... sehe mein Update. Bitte sag mir, wenn ich etwas vermisse. –