W jaki sposób wygodnie parsować Stringa przychodzącego np. Jsonem na Enuma? Najbardziej łopatologiczny sposób to SomeEnum.valueOf(Some String) i try catche, ale myślę, że istnieją jakieś bardziej cywilizowane sposoby. A może w ogóle to zignorować, bo to sprawa frontu, żeby użytkownikowi udostępnił tylko konkretne wartości np. w postaci jakieś rozwijanej listy z enumami? (Np. status - udone,done).
- Rejestracja:ponad 3 lata
- Ostatnio:ponad 2 lata
- Postów:94

- Rejestracja:prawie 15 lat
- Ostatnio:około 5 godzin
- Lokalizacja:Laska, z Polski
- Postów:10074
Sampeteq napisał(a):
W jaki sposób wygodnie parsować Stringa przychodzącego np. Jsonem na Enuma? Najbardziej łopatologiczny sposób to SomeEnum.valueOf(Some String) i try catche, ale myślę, że istnieją jakieś bardziej cywilizowane sposoby.
Istnieje specjalna metoda, to tego i nazywa sie właśnie valueOf()
. Nie ma tym nic niecywilizowanego, chyba że chodzi Ci o to, że info o tym że takiej wartości nie ma jako wyjątek, ale to jest dlatego że tell, don't ask.
A może w ogóle to zignorować, bo to sprawa frontu, żeby użytkownikowi udostępnił tylko konkretne wartości np. w postaci jakieś rozwijanej listy z enumami? (Np. status - udone,done).
Front, czy nie front; tak czy tak na backendzie musisz obsłużyć, co się ma stać kiedy użytkownik wyśle wartość niezgodną z interfejsem.

- Rejestracja:około 17 lat
- Ostatnio:dzień
- Postów:1875
valueOf
jest spoko, natomiast jesli jest mozliwosc, że przyjdzie niespodziewana wartość, to aplikacja powinna rzucic jakis IllegalArgumentException
, ktory wskazuje na zlamanie kontraktu przez klienta.
EDIT: sprawdzilem, że tak dziala ta metoda, wiec pozostaje obsluzenie tego, np. zwrocenie HTTP 400/422 do frontu.
- Rejestracja:ponad 12 lat
- Ostatnio:około 6 godzin
- Postów:3584
Pytanie z jakiej biblioteki korzystasz - większość z nich jest na tyle sprytna, że przy próbie deserializacji do enuma sama załapie, żeby użyć valueOf
.
Jeśli robisz to ręcznie to czasem przydaje się jakaś metoda statyczna w stylu Option<MyEnum> findByName(String name)
lub Option<MyEnum> findByProperty(Integer propertyValue)
itp. itd. W praktyce dużo zależy od twojego przypadku użycia.

- Rejestracja:ponad 16 lat
- Ostatnio:około 3 lata
- Postów:1524
@Sampeteq:
W jaki sposób wygodnie parsować Stringa przychodzącego np. Jsonem na Enuma?
Po co?
Jaki problem chcesz rozwiązać? Co masz konkretnie zrobić (nie jak ale co)?
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.