Wpis z mikrobloga

#programowanie #java robicie switcha, w którym casy są oparte o przekazany enum (np. VehicleType). Ponad switchem tworzycie zmienną Vehicle vehicle (Vehicle to interfejs) i jeszcze jej przypisujecie do niej żadnego obiektu. W zależności od tego jaki jest enum ( VehicleType.Car, VehicleType.Boat itd) to taki obiekt zostanie utworzony, np vehicle = new Car(). Implementujecie tworzenie obiektu dla wszystkich typów enum. Oczywiście w takiej sytuacji obiekt może nie zostać utworzony (np. ktoś doda nowy rodzaj w enumie i puści to w tego switcha) dlatego w switchu trzeba utworzyć opcję default. Co teraz wklepać w default, żeby kod był elegancki? throw new RuntimeException("VehicleType: + vehicleType + " is not supported") ?
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ChestNoot: tylko do logów a ogólnie to najlepiej jakby testy wykluczały możliwość puszczenia na produkcję kodu, który może wyrzucić ten wyjątek ;) co rozumiesz pod pojęciem defending coding?
  • Odpowiedz
@htfhere: proszę nie rób switch-case do takich rzeczy, jak masz już tego biednego enuma to możesz zrobić go nie anemicznego i w nim zawrzeć tworzenie obiektu i zrobić z niego factorkę
Ale naprawdę jak robisz switch-case do tego to wiedz że coś poszło nie tak z Twoim kodem
  • Odpowiedz
@htfhere: Ja jestem zwolennikiem factory na enumach powyżej javy 8 - można to zaimplementować funkcjonalnie i wymusza to przy dodaniu enuma, implementacje funkcji fabrykującej.
Minus jest ten że gdy masz za dużo logiki w enumach to robią sie problemy ale pytanie czy enum jest anemiczny cz nie.
Wg pojawia się duże pytanie czy potrzebny jest Ci ten enum?
  • Odpowiedz
@jak5z: nie jest potrzebny, mógłbym np. przekazywać wartość w postaci stringa i w oparciu o to wybierać implementację, ale core problemu by się nie zmienił, czy mam rację? Widzę, że jesteś bardzo dobrze zaznajomiony z pisaniem czystego kodu, czy miałbyś może gdzieś "pod ręką" kod z przykładowym funkcjonalnym wzorcem fabryki na enumach? Chętnie rzuciłbym okiem na kawałek dobrego kodu.
  • Odpowiedz
Psttern Visitor na interfejsie do Vehicle. Wszystko będzie eleganckie i nowe typy będą musialy mieć dodana odpowiednią implementację (kompilator to wymusi)
  • Odpowiedz