मैं उपयोगिता वर्ग में विधि के लिए किसी भी enum मान पास करना चाहते हैं और एक ही enum प्रकार के एक और enum मूल्य प्राप्त करना चाहते हैं। कुछ इस तरह:जावा: विशिष्ट enums और जेनेरिक Enum <?> पैरामीटर
विधि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
बुलाया लाइन पर त्रुटि के साथ विफल:
$ mvn clean compile
....
[ERROR] /home/.... DataUploader.java:[173,53] inconvertible types
found : java.lang.Enum<capture#414 of ?>
required: .....DataUploader.EUploadMethod
मैं या तो ग्रहण और Maven में सूर्य 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"
सवाल:
यह कोड संकलित करने योग्य है और ग्रहण में कार्यात्मक है, और संकलित मेवेन में विफल रहता है, जहां तक मुझे एक ही जावैक कंपाइलर पता है?
जेनेरिक
Enum<?>
पैरामीटर के लिए विशिष्ट मानकों को पारित करने में क्या गलत है? विशेष रूप से जब यह जेनरिक की बात आती है
धन्यवाद,
मार्टिन Schayna
मैंने मैवेन -2 टैग हटा दिया क्योंकि यह एक मैवेन संबंधित मुद्दा नहीं है बल्कि एक शुद्ध ग्रहण/जावैक कंपाइलर मुद्दा है। –
ग्रहण में जेडीके से स्वतंत्र, इसका स्वयं का कंपाइलर है। यही कारण है कि इसे जेडीके स्थापित करने की आवश्यकता नहीं है (आपको केवल जेआरई की आवश्यकता है।) – finnw