Java: bestimmte Enumerationen und generischen Enum<?> - Parameter

Möchte ich weitergeben jeder enum-Wert-Methode in der utility-Klasse und erhalten ein weiteres enum-Wert des gleichen enum-Typ. So etwas wie dieses:

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;
    } 
}

Verwendung der Methode getEnumAttribute():

//simple enum
public enum EUploadMethod {
    INSERT, UPDATE, DELETE
}

//read enum value from XML config file
EUploadMethod method = XMLUtils.getEnumAttribute(element, "method",
        EUploadMethod.INSERT);

Dieser code ist voll funktionsfähig, Eclipse kompiliert und läuft es ohne Warnungen oder Fehler, und es funktioniert wie ein Charme.

Aber wenn ich sauber und Projekt kompilieren von der Kommandozeile durch Maven2, es schlägt fehl mit Fehler on line, wo ist getEnumAttribute genannt:

$ mvn clean compile
....
[ERROR] /home/.... DataUploader.java:[173,53] inconvertible types
found   : java.lang.Enum<capture#414 of ?>
required: .....DataUploader.EUploadMethod

Ich bin Sun JDK 1.6 verwenden, entweder Eclipse und 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"

Fragen:

  1. Warum dieser code ist kompilierbar und funktional in Eclipse, und kompilieren Sie scheitert in Maven, die soweit ich weiß denselben javac-compiler?

  2. Was ist Los mit übergeben bestimmte enums Generika Enum<?> Parameter?

Dank,

Martin Schayna

  • Ich entfernte die maven-2-tag, da dies nicht ein maven-bezogene Frage, sondern eine Reine eclipse/javac-compiler-Problem.
  • Eclipse hat einen eigenen compiler, unabhängig von der JDK. Deshalb ist es nicht erforderlich, dass das JDK installiert werden (Sie müssen nur die JRE.)
InformationsquelleAutor mschayna | 2010-02-08
Schreibe einen Kommentar