Я хочу передать любое значение enum методу в классе утилиты и получить другое значение перечисления того же типа перечисления. Что-то вроде этого:Java: специфические перечисления и общие параметры 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;
}
}
Использование метода getEnumAttribute()
:
// simple enum
public enum EUploadMethod {
INSERT, UPDATE, DELETE
}
// read enum value from XML config file
EUploadMethod method = XMLUtils.getEnumAttribute(element, "method",
EUploadMethod.INSERT);
Этот код является полностью функциональным, Eclipse, компилирует и запускает его без предупреждения или ошибок, и он работает как шарм.
Но когда я чищу и компиляции проекта из командной строки по Maven2, он терпит неудачу с ошибкой на линии, где getEnumAttribute
называется:
$ mvn clean compile
....
[ERROR] /home/.... DataUploader.java:[173,53] inconvertible types
found : java.lang.Enum<capture#414 of ?>
required: .....DataUploader.EUploadMethod
Я использую Sun JDK 1.6 в любом Затмении и 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"
Вопросы:
Почему этот код является компилируемым и функционален в Eclipse, а компиляция сбой в Maven, который использует, насколько я знаю, тот же javac-компилятор?
Что не так с передачей конкретных перечислений в общие параметры
Enum<?>
?
Спасибо,
Martin Schayna
Я удалил тег maven-2, поскольку это не проблема, связанная с maven, а проблема компилятора чистого eclipse/javac. –
Eclipse имеет собственный компилятор, независимый от JDK. Вот почему он не требует установки JDK (вам нужна только JRE.) – finnw