Probleme mit Enumerations und eigenen EnumTypes

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Probleme mit Enumerations und eigenen EnumTypes

    Ich habe folgendes Problem. Ich verwende eine Enumeration um drei verschiedene Werte zu halten. Zusätzlich habe ich intern in meinem Programmcode einen eigenen EnumType. Mit getEnumValueFor(Typ, Wert) bekomme ich ein EnumValue-Object vom Typ mit dem entsprechenden Wert. Bei EnumType kann man verschiedene Typen mit entsprechenden möglichen Wertepaaren (Wert, Beschreibung) anmelden. Mein Problem ist jetzt, wenn ich zum Beispiel zwei verschiedene EnumTypes haben will, die sich nur dadurch unterscheiden, dass in dem einen Fall ONE, TWO und THREE mögliche Werte darstellen und im anderen nur ONE und TWO. Alle Möglichkeiten, die mir einfallen, sind nicht so toll (zwei Enumerations oder immer vorort im Code den EnumValue abfragen).

    Bitte gebt keine Kommentare zum grundsätzlichen Aufbau bezüglich dieser EnumTypes ab. Ich baue nur auf einem vorhandenen Code auf, der nicht verändert werden kann. Intern müssen diese EnumTypes verwendet werden. Zusätzlich ist es auch nicht optimal ein Interface so als mehr oder weniger Konstantenlager zu missbrauchen. Auch das ist üblich in diesem Projekt. Das Ziel ist einfach keine langen Konstantenlisten zu halten oder diese EnumValues direkt immer abfragen zu müssen, sondern sie so wie folgend abzuspeichern, um über die Enumeration darauf zugreifen zu können.

    Gibt es eine elegante Lösung dafür?

    Quellcode

    1. public interface ITyp
    2. {
    3. public static final String TYP1 = "Typ1";
    4. public static final String TYP2 = "Typ2";
    5. public enum TYP
    6. {
    7. ONE("1", "Eins", "Eins"),
    8. TWO("2", "Zwei", "Zwei"),
    9. THREE("3", "Drei", "Drei");
    10. private String value;
    11. private String langValue;
    12. private String description;
    13. private EnumValue enumValue;
    14. private TYP(String Ps_value, String Ps_langValue, String Ps_descr)
    15. {
    16. value = Ps_value;
    17. langValue = Ps_langValue;
    18. description = Ps_descr;
    19. enumValue = EnumType.getEnumValueFor(TYP1, value);
    20. }
    21. public String value()
    22. {
    23. return value;
    24. }
    25. public String langValue()
    26. {
    27. return langValue;
    28. }
    29. public String description()
    30. {
    31. return description;
    32. }
    33. public EnumValue enumValue()
    34. {
    35. return enumValue;
    36. }
    37. }
    38. }
    Alles anzeigen
  • Nachdem man enums nicht vererben kann, würde ich vorschlagen, du wandelst den enum in eine class um, mit public static final members:

    Quellcode

    1. public interface ITyp
    2. {
    3. public static final String TYP1 = "Typ1";
    4. public static final String TYP2 = "Typ2";
    5. public class TYP
    6. {
    7. public static final TYP ONE = new TYP ("1", "Eins", "Eins");
    8. public static final TYP TWO = new TYP ("2", "Zwei", "Zwei");
    9. private String value;
    10. private String langValue;
    11. private String description;
    12. private EnumValue enumValue;
    13. protected TYP(String Ps_value, String Ps_langValue, String Ps_descr)
    14. {
    15. value = Ps_value;
    16. langValue = Ps_langValue;
    17. description = Ps_descr;
    18. enumValue = EnumType.getEnumValueFor(TYP1, value);
    19. }
    20. public String value()
    21. {
    22. return value;
    23. }
    24. public String langValue()
    25. {
    26. return langValue;
    27. }
    28. public String description()
    29. {
    30. return description;
    31. }
    32. public EnumValue enumValue()
    33. {
    34. return enumValue;
    35. }
    36. }
    37. public class TYP2 extends TYP
    38. {
    39. public static final TYP THREE = new TYP ("3", "Drei", "Drei");
    40. // constructor required
    41. private TYP2(String Ps_value, String Ps_langValue, String Ps_descr)
    42. {
    43. super (Ps_value, Ps_langValue, Ps_descr);
    44. }
    45. }
    46. }
    Alles anzeigen


    hth