2012-07-31 6 views
9
installieren

bestimmt werden habe ich diese Funktion seltsame Fehler zu werfen, wenn ich versuche, eine zu tun „mvn install“Fehler: Typ Parameter von <T> T kann nicht während Maven

public <T> T get(final AN_ENUM key) 
{ 
    return some_map.get(key); 
} 

Das ist die Linie, wo ich den Fehler

final int value = get(AN_ENUM.A_FIELD); 

Und das ist der Fehler in maven:

XXX.java:[25,41] type parameters of <T>T cannot be determined; 
    no unique maximal instance exists for type variable T with 
    upper bounds int,java.lang.Object 

ich weiß schon, wie man "fix it" . Ich muss nur die int zu Integer in meinem letzten Codebeispiel ändern und der Fehler verschwindet. Es sagt mir, dass Maven aus irgendeinem Grund nicht in der Lage ist, einen Integer als int darzustellen, wenn ich einen Typparameter verwende.

Meine Frage ist .. warum?

In Eclipse, mit dem gleichen JDK, konnte ich meine Anwendung ohne irgendwelche Probleme oder Warnungen laufen lassen.

  • JDK 1.6
  • Eclipse-Indigo Service Release 2
  • Maven 3.0.4
+2

Was ist die Quellstufe im maven Compiler-Plugin in der POM.xml? Ist es auf weniger als 1,5 eingestellt? – GMK

+2

Was passiert, wenn Sie mit javac kompilieren? Sie könnten feststellen, dass dies eine Diskrepanz zwischen ECJ und javac ist. – hertzsprung

Antwort

3

In Ihrem pom.xml, die Zielversion auf mindestens 1,5 eingestellt:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.0.2</version> 
    <configuration> 
     <source>1.5</source> 
     <target>1.5</target> 
    </configuration> 
</plugin> 

Diese So verwendet Maven JDK 1.5 (oder Sie können es auf 1.6 setzen, wenn Sie möchten).

+0

Ok, ich verstehe, wie man das Problem beheben kann, aber ich frage mich, warum es nicht kompiliert. – SLuceri

11

Ich hatte ein ähnliches Problem und es stellt sich heraus, dass ich versuchte, eine "Boolean" (Primitive) und nicht ein "Boolean" (Objekt) zurückzugeben. Da Sie versuchen, es auf ein "int" (primitiv) zu setzen, wird es scheitern.

Versuchen Sie, Ihre "int" in eine "Integer" zu ändern und hoffentlich sollte das beheben.