유틸리티 클래스의 메서드에 열거 형 값을 전달하고 같은 열거 형의 다른 열거 형 값을 가져 오려고합니다. 이런 식으로 뭔가 : 방법 getEnumAttribute()
의자바 : 특정 열거 형 및 일반 열거 형 <?> 매개 변수
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;
}
}
사용 :
// simple enum
public enum EUploadMethod {
INSERT, UPDATE, DELETE
}
// read enum value from XML config file
EUploadMethod method = XMLUtils.getEnumAttribute(element, "method",
EUploadMethod.INSERT);
이 코드는 완벽하게 작동, 이클립스 컴파일 및 경고 또는 오류없이 실행하고 매력처럼 작동합니다.
하지만 청소하고 Maven2에 의해 명령 행 에서 프로젝트를 컴파일 할 때, 그것은getEnumAttribute
가 호출되는 경우 줄에 오류와 함께 실패합니다
: 나는 이클립스와 메이븐 중 하나에서 일 JDK 1.6를 사용하고
$ mvn clean compile
....
[ERROR] /home/.... DataUploader.java:[173,53] inconvertible types
found : java.lang.Enum<capture#414 of ?>
required: .....DataUploader.EUploadMethod
$ 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"
질문 :
이 코드가 컴파일 가능한 이유는 이클립스에서 작동하는이고, 컴파일 할 때까지는 동일한 javac 컴파일러를 사용하는 Maven 이 실패합니다.
특정 열거 형을 일반
Enum<?>
매개 변수에 전달하면 어떤 문제가 발생합니까? 이 제네릭에 관해서 특히
감사합니다,
마틴 Schayna
maven-2 태그는 maven 관련 문제가 아니고 pure eclipse/javac 컴파일러 문제이므로 제거했습니다. –
Eclipse에는 JDK와 관계없이 자체 컴파일러가 있습니다. 그렇기 때문에 JDK가 설치 될 필요가 없습니다 (JRE 만 필요합니다). – finnw