我想将任何枚举值传递给工具类中的方法,并获得另一个枚举类型相同的枚举值。事情是这样的:Java:特定枚举和泛型枚举<?>参数
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
我在任的Eclipse和Maven使用Sun JDK 1.6
$ 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<?>
参数有什么问题?
感谢,
马丁Schayna
我删除了maven-2标签,因为这不是maven相关的问题,而是纯粹的eclipse/javac编译器问题。 – 2010-02-08 17:30:17
Eclipse拥有自己的编译器,独立于JDK。这就是为什么它不需要安装JDK(您只需要JRE)。 – finnw 2010-02-08 17:32:13