No instance(s) of type variable(s) K,V exist

Publié le par Séverine

Parfois ça ne compile pas et on n'y comprend rien. Le problème du jour concernait cette ligne de code :

 import static com.google.common.collect.Maps.newTreeMap; ... private final Map<MyKey, MyObject> attribute = newTreeMap(MY_COMPARATOR); 

qui produisait l'erreur :

 [ERROR] Failed to execute goal org.apache.maven.plugins: maven-compiler-plugin:2.3.2:compile (default-compile) on project publisher.qc.api: Fatal error compiling: Error while executing the compiler. InvocationTargetException: startup failed: [ERROR] Compile error during compilation with javac. [ERROR] /home/myname/svn/.../MyClass.java:38: incompatible types; no instance(s) of type variable(s) K,V exist so that java.util.TreeMap<K,V> conforms to java.util.Map<MyKey,MyObject> [ERROR] found : <K,V>java.util.TreeMap<K,V> [ERROR] required: java.util.Map<MyKey,MyObject> [ERROR] private final Map<MyKey,MyObject> attribute = newTreeMap(MY_COMPARATOR); [ERROR] ^ 

pour résoudre le problème, il suffisait de modifier la ligne de cette façon :

 private final Map<MyKey, MyObject> attribute =  Maps.<MyKey, MyKey, MyObject>newTreeMap(MY_COMPARATOR); 

Mais normalement, on ne devrait pas avoir besoin de préciser à nouveaux les generics à cet endroit. Le compilateur devrait pouvoir se débrouiller tout seul. Ce qui est énervant, c'est que cette erreur n'apparaît pas sur tout les postes. Parfois, on a l'erreur, et parfois non. De plus, les autres utilisations de newTreeMap dans notre code ne posent pas ce problème. Après quelques recherches sur le net, il s'avère que cette erreur apparaît parfois avec l'utilisation d'openJDK mais nous ne l'utilisons pas. C'est peut-être parce que nous utilisons le compilateur groovy pour compiler notre code... mystère ...

Publié dans java

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article