2012-07-31 8 views
9

Tengo esta función error de tiro raro cuando trato de hacer un "mvn instalar"error: los parámetros de tipo de <T> T no se pueden determinar durante Maven Instalar

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

Ésta es la línea en la que se produce el error

final int value = get(AN_ENUM.A_FIELD); 

Y este es el error en 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 

que ya sé cómo "solucionarlo" . Solo necesito cambiar el int al Integer en mi última muestra de código y el error desaparece. Me dice que maven, por algún motivo, no puede convertir un entero como int cuando uso un parámetro de tipo.

Mi pregunta es ... ¿por qué?

En eclipse, utilizando el mismo JDK, he podido ejecutar mi aplicación sin problemas ni advertencias.

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

¿Cuál es el nivel de origen en el complemento del compilador maven en el archivo POM.xml? ¿Está configurado a menos de 1.5? – GMK

+2

¿Qué ocurre si compila con javac? Puede encontrar que esto es una discrepancia entre ECJ y javac. – hertzsprung

Respuesta

3

En su pom.xml, establezca la versión de destino de al menos 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> 

Este De esta manera, Maven utilizará JDK 1.5 (o puede establecerlo en 1.6 si lo desea).

+0

Ok, entiendo cómo solucionar el problema, pero me pregunto por qué no se compila. – SLuceri

11

Tuve un problema similar y resultó que estaba intentando devolver un "booleano" (Primitivo) y no un "Booleano" (Objeto). Como intenta configurarlo como "int" (primitivo), terminará fallando.

Intenta cambiar tu "int" por un "Entero" y esperemos que así lo arregle.

Cuestiones relacionadas