public enum? in Java

J

JavaToad

Gast
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:
public Collection<Entry> filter(Collection<Entry> entries) {
		final ArrayList<Entry> result = new ArrayList<Entry>();
		for (Entry e: entries) {
			switch(this.ordinal()) {
			case 1: 
				// Male with an age of 18 years or more and phone number contact information
				if ((e.isMale() && e.getAge() >= 18 && e.getContactInformation() instanceof PhoneNumber)) 
					result.add(e);
				break;
			case 2: 
				// Female with a surname of either "Duck" or "Maus" and an age of 30 or more years
				if (e.isFemale() && (e.getSurName().equalsIgnoreCase("Duck") || e.getSurName().equalsIgnoreCase("Maus") && e.getAge() >= 30)) 
					result.add(e);
				break;
			case 3: 
				// 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?
 
B

bone2

Gast
Code:
EnumKlassenName.CONSTANTE.filter(xyz)
Wo ist das Problem, "geht nicht" ist keine Fehlerangabe
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
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:
Java:
FilterEnum.FILTER_NAME.filter(deineCollection);
 

faetzminator

Gesperrter Benutzer
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:
[...]

Es sei aber noch erwähnt, dass es auch eine korrekte Variante gibt, wie man Enums in Switch-Statements verwenden kann:
Java:
switch (this) {
    case FOO:
        // ...
    case BAR:
        // ...
    // ...
}
Aber eben, in diesem Zusammenhang auch unschön, EikeB's Variante wär eine Überlegung wert ;)
 
N

nillehammer

Gast
Die EikeB's Weg ist der richtige. Gehe wie folgt vor:

Definiere Dir zunächst ein Interface Filter<E>
Java:
public interface Filter<E> {

  public boolean accept(E element);

}
Lasse Deine enum dieses Interface implementieren, indem Du die Methode bei jeder Enum-Konstante so schreibst, wie Du sie haben möchtest:
Java:
public enum EntryFilter implements Filter<Entry> {
   ADULT {
      public boolean accept(Entry entry) {
         return entry.getAge >= 18;
      }

   },
   MAN {
      public boolean accept(Entry entry) {
         return element.isMale && ADULT.accept(entry);
      }
   },
   WOMAN{
      public boolean accept(Entry entry) {
         return !element.isMale && ADULT.accept(entry);
      }
   },
   BOY{
      public boolean accept(Entry entry) {
         return element.isMale && !ADULT.accept(entry);
      }
   },
   GIRL {
      public boolean accept(Entry entry) {
         return !element.isMale && !ADULT.accept(entry);
      }
   };
}
Definiere die filter-Methode wie folgt:
Java:
public class FilterUtil {
public static <E> Collection<E> doFilter(Collection<E> elements, Filter<E> filter) {
   final ArrayList<E> result = new ArrayList<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.
 
Zuletzt bearbeitet von einem Moderator:

Crian

Top Contributor
Java:
public static <E> Collection<E> doFilter(Collection<E> elements, Filter<E> filter) {
   final ArrayList<E> result = new ArrayList<E>();
        for (E element: elements) {
           if(filter.accept(element) {
            result.add(element);
           }
        }
    return result;
}

Ist das erste <E> über? Oder verstehe ich gerade etwas nicht?
 

Crian

Top Contributor
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.
 

tfa

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X enum Fehlermeldung "The public type Day must be defined in its own file" Java Basics - Anfänger-Themen 8
P public enum ";"expected Java Basics - Anfänger-Themen 7
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
Say public/default Interface Java Basics - Anfänger-Themen 9
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
Denix The public type Main must be defined in its own fileJava(16777541) Java Basics - Anfänger-Themen 13
melaniemueller Datenkapselung Sichtbarkeit public Java Basics - Anfänger-Themen 4
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
J Klasse wird als private erkannt obwohl sie public deklariert ist Java Basics - Anfänger-Themen 3
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
K modifier public Java Basics - Anfänger-Themen 3
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
D Klassenvariablen standardmäßig private oder public? Java Basics - Anfänger-Themen 2
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
T public void - Problem Java Basics - Anfänger-Themen 10
B public/private nur 1x schreiben Java Basics - Anfänger-Themen 3
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
T public-private problem Java Basics - Anfänger-Themen 5
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B main methode ohne public Java Basics - Anfänger-Themen 5
W Frage public protected konstruktor Java Basics - Anfänger-Themen 6
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
S Frage zu public static Java Basics - Anfänger-Themen 29
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
K Kapselung public / private verständis problem Java Basics - Anfänger-Themen 17
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
K OOP Attribute von Klasse in die public class übertragen? Java Basics - Anfänger-Themen 7
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
F public variable erstellen, & darauf zugreifen Java Basics - Anfänger-Themen 12
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
B Public boolean einfügen Java Basics - Anfänger-Themen 12
N public class -> public method -> variable private? Java Basics - Anfänger-Themen 10
R jLabel lässt sich nicht public setzen?? Java Basics - Anfänger-Themen 15
Hamstinator public static. Gute Idee? Java Basics - Anfänger-Themen 6
-horn- public static double[][][] NAME() nur per RETURN Wertrückgabe möglich? Java Basics - Anfänger-Themen 20
S Public-Klassen und Dateien Java Basics - Anfänger-Themen 5
StickToFreak Fehler mit public class Java Basics - Anfänger-Themen 13
K konstruktur als public definieren Java Basics - Anfänger-Themen 11
StickToFreak public class problem ôÔ Java Basics - Anfänger-Themen 3
G field public/private wann Java Basics - Anfänger-Themen 11
H eine als public deklariete Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
T Konstruktor mit oder ohne public-Bezeichner? Java Basics - Anfänger-Themen 4
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
P immer "public class". ? Java Basics - Anfänger-Themen 4
J Public / Private Keys speichern bzw. lesen? Java Basics - Anfänger-Themen 8
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
D Frage zu public static void main. Java Basics - Anfänger-Themen 4
J public class Java Basics - Anfänger-Themen 15
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
G Vor oder hinter public static void main. ? Java Basics - Anfänger-Themen 8
G (Anfängerproblem) Problem mit dem Aufruf von public-Methoden Java Basics - Anfänger-Themen 3
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
D Zugriff auf attribut anderer Klasse privat/public? Java Basics - Anfänger-Themen 9
B Warum manchmal public class und manchmal nur class Java Basics - Anfänger-Themen 3
A Javadoc nur bei public Klassen? Java Basics - Anfänger-Themen 3
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
B public und protected Java Basics - Anfänger-Themen 11
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
G GUI Controls private oder public Java Basics - Anfänger-Themen 6
G Variablen public oder private? Java Basics - Anfänger-Themen 9
R public Klassen Java Basics - Anfänger-Themen 12
I public Verständnisfrage Java Basics - Anfänger-Themen 5
S private public Java Basics - Anfänger-Themen 5
R private / public Frage Java Basics - Anfänger-Themen 7
F Warum sind Interface-Methoden public? Java Basics - Anfänger-Themen 19
C public void keyPressed(KeyEvent e) Java Basics - Anfänger-Themen 2
G Public ,private,protected Java Basics - Anfänger-Themen 1
N public void und verhalten bei return Java Basics - Anfänger-Themen 2
K public boolean contains (Object obj) > true or false Java Basics - Anfänger-Themen 16
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
A public/private/etc. Zusatz weglassen Java Basics - Anfänger-Themen 2
A die public static void main ? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben