Hallo ich habe ein kleines Problem, da ich zum ersten mal mit enum Klassen arbeite und auch nach Recherche wenig gefunden habe dachte ich ich frage mal hier.
Ich habe in meiner enum Klasse welchen einen Filter darstellt
folgende Operation:
Java:
publicCollection<Entry>filter(Collection<Entry> entries){finalArrayList<Entry> result =newArrayList<Entry>();for(Entry e: entries){switch(this.ordinal()){case1:// Male with an age of 18 years or more and phone number contact informationif((e.isMale()&& e.getAge()>=18&& e.getContactInformation()instanceofPhoneNumber))
result.add(e);break;case2:// Female with a surname of either "Duck" or "Maus" and an age of 30 or more yearsif(e.isFemale()&&(e.getSurName().equalsIgnoreCase("Duck")|| e.getSurName().equalsIgnoreCase("Maus")&& e.getAge()>=30))
result.add(e);break;case3:// People with a last name that starts with the letter D, which are either female or of an age of less than 18 or 65 and more if((e.isFemale()|| e.getAge()<18|| e.getAge()>=65&& e.getSurName().startsWith("D")))
result.add(e);break;default:return entries;}}return result;}}
Nun wollte ich diese aus einer anderen Klasse ganz normal aufrufen allerdings scheint das mit enum nicht so einfach möglich zu sein wie mit einer normalen Klasse. Hat da jemand vielleicht Tipps für mich was ich anders machen müsste?
Das sollte eigentlich kein Problem sein, zeig doch mal die ganze Klasse und auch den Aufruf den du versuchst.
Java:
switch(this.ordinal())
Sowas sollte man übrigens vermeiden!
Änderst du (oder jemand anderes) mal die Reihenfolge der Enums dann funktioniert plötzlich nichtsmehr wie gewohnt und man ist da lange am rätseln.
Du kannst diese Methode direkt an das Enum hängen, und dann so aufrufen:
Sowas sollte man übrigens vermeiden!
Änderst du (oder jemand anderes) mal die Reihenfolge der Enums dann funktioniert plötzlich nichtsmehr wie gewohnt und man ist da lange am rätseln.
Du kannst diese Methode direkt an das Enum hängen, und dann so aufrufen:
[...]
publicclassFilterUtil{publicstatic<E>Collection<E>doFilter(Collection<E> elements,Filter<E> filter){finalArrayList<E> result =newArrayList<E>();for(E element: elements){if(filter.accept(element){
result.add(element);}}return result;}}
Nutzen tust Du es dann so:
Java:
// entres ist irgendeine Collection mit entries (woher auch immer die kommt)Collection<Entry> men =FilterUtil.doFilter(enties,EntryFilter.MAN);
P.S. Der von Dir gewählte Klassenname "Entry" ist etwas unglücklich. Offensichtlich handelt es sich hier ja um Personen oder allgemeiner um etwas, dass ein Alter und ein Geschlecht hat. Es würden sich also bessere Klassennamen anbieten, z.B. "Person" oder "Creature" oder sowas. Dementsprechend wäre Deine enum dann auch ein "EntryFilter" mehr, sondern ein "PersonFilter". Das ist dann schon sehr viel sprechender.
Komisch. Ich hab auch schon generische Klassen und Methoden entwickelt, die sahen aber anders aus. Vermutlich weil ich mich auf den Typ, der in der Klassendefinition oben hinterlegt war, bezogen habe.
Diese Methode ist statisch, da ist der Unterschied zu "normalen" Verwendung dieser Parameter. Im statischen Kontext gibt es ja keinen Bezug zu einer Typbindung innerhalb einer Instanz.