# prüfen, ob Enums bestimmte Elemente enthalten



## Dobi (20. Jan 2011)

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*

```
public enum E1 { a, b }
```

*E2.java*

```
public enum E2 { c, d }
```

*EnumTest.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:*

```
true
false
```

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

Gruß
Dobi


----------



## eRaaaa (20. Jan 2011)

Mhm, meinst du so etwas:

```
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

```
for (Field f : enumType.getDeclaredFields()) {
			if(f.getName().equals(s)) return true;
		}
		return false;
```
??


----------



## Landei (20. Jan 2011)

[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.


----------



## Dobi (20. Jan 2011)

@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.


----------

