2012-07-31 15 views
9

Ho questa funzione gettando errore strano quando provo a fare un "mvn install"Errore: parametri di tipo di <T> T non possono essere determinati durante Maven Installare

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

Questa è la linea dove ho l'errore

final int value = get(AN_ENUM.A_FIELD); 

E questo è l'errore 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 

so già come "risolvere il problema" . Devo solo cambiare lo int in Integer nel mio ultimo esempio di codice e il bug scompare. Mi dice che Maven, per una qualche ragione, non è in grado di lanciare un intero come int quando uso un parametro di tipo.

La mia domanda è .. perché?

In eclissi, utilizzando lo stesso JDK, sono stato in grado di eseguire la mia applicazione senza problemi né avvertimenti.

  • JDK 1.6
  • Eclipse Indigo Servizio Release 2
  • Maven 3.0.4
+2

Qual è il livello sorgente nel plug-in del compilatore maven in POM.xml? È impostato su meno di 1,5? – GMK

+2

Cosa succede se si compila con javac? Potresti scoprire che questa è una discrepanza tra ECJ e javac. – hertzsprung

risposta

3

Nella tua pom.xml, impostare la versione di destinazione di almeno 1,5:

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

Questo In questo modo, Maven utilizzerà JDK 1.5 (oppure puoi impostarlo su 1.6 se lo desideri).

+0

Ok, ho capito come risolvere il problema, ma mi chiedo il motivo per cui non viene compilato. – SLuceri

11

Ho avuto un problema simile e si è scoperto che stavo tentando di restituire un "booleano" (Primitivo) e non un "Booleano" (Oggetto). Dal momento che stai provando a impostarlo su un "int" (primitivo) finirà per non funzionare.

Prova a cambiare il tuo "int" in un "Integer" e spero che dovrebbe risolvere il problema.