【发布时间】:2010-02-08 10:09:01
【问题描述】:
我想将任何枚举值传递给实用程序类中的方法并获取另一个相同枚举类型的枚举值。像这样的:
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<?>参数有什么问题?
谢谢,
马丁·沙纳
【问题讨论】:
-
我删除了 maven-2 标签,因为这不是与 maven 相关的问题,而是纯粹的 eclipse/javac 编译器问题。
-
Eclipse 有自己的编译器,独立于 JDK。这就是它不需要安装 JDK 的原因(您只需要 JRE。)
标签: java eclipse generics compiler-construction javac