prüfen, ob Enums bestimmte Elemente enthalten

Dobi

Neues Mitglied
Hallo liebe Community.

Gibt es eine generische Möglichkeit, zu prüfen, ob Enums bestimmte Elemente enthalten?
Mit anderen Worten: Kann ich die Coderedundanz von CheckIfE1Has und CheckIfE2Has in meinem Beispiel loswerden?

E1.java
Java:
public enum E1 { a, b }

E2.java
Java:
public enum E2 { c, d }

EnumTest.java
Java:
public class EnumTest {

    private static boolean CheckIfE1Has( String s ) {
        try { E1.valueOf( s ); }
        catch ( java.lang.IllegalArgumentException e ) { return false; }
        return true;
    }

    private static boolean CheckIfE2Has( String s ) {
        try { E2.valueOf( s ); }
        catch ( java.lang.IllegalArgumentException e ) { return false; }
        return true;
    }

    public static void main(String[] args) {
        System.out.println( CheckIfE1Has( "a" ) );
        System.out.println( CheckIfE2Has( "a" ) );
    }
}

Ausgabe:
Code:
true
false

Ich habe kein konkretes Design, in dem ich das zwangsläufig benutzen würde. Es interessiert mich aber trotzdem. ;-)

Gruß
Dobi
 
Mhm, meinst du so etwas:
Java:
	private static <T extends Enum<T>> boolean CheckIfHas(Class<T> enumType, String s) {
		try {
			Enum.valueOf(enumType, s);
		} catch (java.lang.IllegalArgumentException e) {
			return false;
		}
		return true;
	}

	public static void main(String[] args) {
		System.out.println(CheckIfHas(E1.class,"a"));
		System.out.println(CheckIfHas(E2.class,"a"));
	}

oder vllt. so etwas wie
Java:
		for (Field f : enumType.getDeclaredFields()) {
			if(f.getName().equals(s)) return true;
		}
		return false;
??
😳
 
[c]Enum.valueOf(MyEnumClass.class, "NAME")[/c] liefert dir entweder das gewüschte Enum oder eine IllegalArgumentException wenn es das nicht gibt. Damit sollte das also gehen.

Bei einem guten Design solltest du so etwas normalerweise nicht brauchen.
 
@eRaaaa: Sehr gut. Genau sowas wie deine erste Version habe ich gesucht. Vielen Dank.:toll:

@Landei: Richtig. Ich brauche es auch nicht. Für mich ist Java nur recht neu, und deshalb wollte ich es gerne einfach nur herausfinden. 😉
 

Neue Themen


Zurück
Oben