Próbuję napisać kod Java dla zestawu klas wyliczeniowych.Jak kodować zestaw klas wyliczeniowych, które powinny obsługiwać publiczną metodę statyczną
Każdy z enumów zawiera pewne koncepcyjnie różne dane, więc nie ma sensu ich łączyć. Wyliczenia są również mapowane do wartości w bazie danych, a więc również udostępniają niektóre typowe operacje, zarówno instancje, jak i operacje statyczne, związane z ładowaniem danych z bazy danych.
Potrzebuję uogólnić zestaw klas wyliczeniowych, które mam, tak, że mogę przekazać jedną z tych wyliczeń do innej klasy, która wykonuje i buforuje wyszukiwania bazy danych odnoszące się do każdego z różnych wyliczeń.
Ponieważ klasa pamięci podręcznej/wyszukiwania będzie również zależeć od publicznych i statycznych metod zdefiniowanych w każdym wyliczeniu, w jaki sposób mogę zakodować moje rozwiązanie, aby zagwarantować, że każde wyliczenie, które może zostać przekazane do klasy, będzie miało wymagane metody ?
Normalne podejście polegałoby na zdefiniowaniu interfejsu, ale interfejsy nie pozwalają na stosowanie metod statycznych.
Alternatywnie możesz użyć klasy abstrakcyjnej do zdefiniowania interfejsu i części wspólnej implementacji, ale nie sądzę, że jest to możliwe z wyliczeniami (rozumiem, że wyliczenia muszą rozszerzyć klasę Enum i nie można ich rozszerzyć).
Jakie są moje opcje, które pozwalają mi upewnić się, że wszystkie moje wyliczenia implementują potrzebne mi metody?
Przykład wyliczenia:
public enum MyEnum{
VALUE_ONE("my data");
VALUE_TWO("some other data");
/**
* Used when mapping enums to database values - if that sounds odd,
* it is: it's legacy stuff
*
* set via private constructor
*/
private String myValue;
//private constructor not shown
public static MyEnum lookupEnumByString(String enumValue){
//find the enum that corresponds to the supplied string
}
public String getValue(){
return myValue;
}
}
Nie znam konkretnych wymagań, ale ** z wyjątkiem bardzo szczególnych przypadków **, gdzie wartości w bazie danych wynoszą ** stały ** i ** mały w liczbach **, odwzorowanie Obliczenia wartości bazy danych mają tendencję do być przesadą, która prowadzi do zwiększonej złożoności. Z tym, mówiąc, wdrożenie interfejsu (lub wdrożenie metody statycznej, jak w twoim przykładzie) byłoby w porządku. –
Tak, zgadzam się +1. W naszym przypadku oznacza to dane statyczne przechowywane w bazie danych, dzięki czemu można je modyfikować bez zmiany kodu. Wyliczenia są również używane do definiowania akceptowalnych wartości publicznego interfejsu internetowego, więc odkryliśmy, że najłatwiej jest zamknąć mapowanie z zewnętrznych danych do naszej usługi internetowej do naszej bazy danych przy użyciu tego zestawu zmiennych. – chrisbunney