Je souhaite transmettre une valeur enum à method dans la classe utilitaire et obtenir une autre valeur enum de même type enum. Quelque chose comme ceci:Java: énumérations spécifiques et paramètres génériques Enum <?>
public class XMLUtils {
public static Enum<?> getEnumAttribute(Element element, String name,
Enum<?> defaultValue) {
if (element.hasAttribute(name)) {
String valueName = element.getAttribute(name);
// search for value
for (Enum<?> value: defaultValue.getClass().getEnumConstants())
if (value.toString().equalsIgnoreCase(valueName))
return value;
}
// not found, return default value
return defaultValue;
}
}
Utilisation de la méthode getEnumAttribute()
:
// simple enum
public enum EUploadMethod {
INSERT, UPDATE, DELETE
}
// read enum value from XML config file
EUploadMethod method = XMLUtils.getEnumAttribute(element, "method",
EUploadMethod.INSERT);
Ce code est entièrement fonctionnel, Eclipse compile et fonctionne sans avertissements ou des erreurs et cela fonctionne comme un charme.
Mais quand je nettoie et compilent projet de ligne de commande par Maven2, il échoue avec l'erreur en ligne où est getEnumAttribute
appelé:
$ mvn clean compile
....
[ERROR] /home/.... DataUploader.java:[173,53] inconvertible types
found : java.lang.Enum<capture#414 of ?>
required: .....DataUploader.EUploadMethod
J'utilise Sun JDK 1.6 dans les deux Eclipse et Maven:
$ mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_14
Java home: /usr/lib/jvm/java-6-sun-1.6.0.14/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.27-17-generic" arch: "i386" Family: "unix"
questions:
Pourquoi ce code est compilable et fonctionnel dans Eclipse, et la compilation échoue dans Maven qui utilise aussi loin que je connais même compilateur javac?
Quel est le problème de passer des énumérations spécifiques aux paramètres génériques
Enum<?>
?
Merci,
Martin Schayna
J'ai supprimé la balise maven-2 car ce n'est pas un problème lié à maven mais un problème de compilateur eclipse/javac pur. –
Eclipse possède son propre compilateur, indépendant du JDK. C'est pourquoi il ne nécessite pas l'installation du JDK (vous n'avez besoin que du JRE.) – finnw