Wpis z mikrobloga

Hej mirki, ma ktoś jakiś pomysł jak to najlepiej rozwiązać?
Mam klasy Dish oraz Product, obie klasy dziedziczą po klasie Food, generalnie jedyna różnica tych dwóch klas polega na tym, że Dish zawiera jeszcze listę produktów (dla uproszczenia załóżmy, że Product ma tylko nazwę, a Dish nazwę + listę produktów). Dodatkowo mam klasę Calendar, który zawiera datę oraz obiekt Food (czyli produkt lub danie). I potrzebuje z poziomu kalendarza dostać się do listy produktów w klasie Dish. Próbowałem zrobić coś takiego, ale wywala mi ClassCastException link.

A tutaj plik json, który przesyłam jako RequestBody link

#java #programowanie #naukaprogramowania #spring
  • 7
@nerfipro174:
A od czego jest klasa Food i czym się różni od Product?
A ty czasem nie próbujesz (przynajmiej tak jest w C kratka) zapisać Dish do product? Czemu nie po prostu .getProducts()?

List<Product> products = ((Dish) calendar.getFood()).getProducts();
na
List<Product> products = (calendar.getFood().getProducts();

I też pytanie czemu calendar ma getFood :D
to dlaczego w Calendar nie przechowujesz obiektu klasy Dish, skoro potrzebujesz się dostać do jej metody? co chcesz konkretnie osiągnąć? po co ci ten Food wgl?
@lol3pdg: @ly000 Generalnie tworzę aplikacje, w której można sobie ustalić plan żywieniowy i będzie liczyła kalorie na dany dzień. I własnie po to klasa Calendar, przechowująca datę oraz obiekt typu Food. Z tym Food, Product i Dish to chodzi o to, że do stworzenia dania potrzeba kilku produktów, natomiast do kalendarza można dodać zarówna dania jak i same produkty (bo przecież takie jabłko też można zjeść, mimo, że nie posiada ono
bo przecież takie jabłko też można zjeść, mimo, że nie posiada ono żadnych składników


@nerfipro174:
Przemyśl nazewnictwo, posiłek nazwałbym Meal

Natomiast do kalendarza można dodać zarówna dania jak i same produkt (bo przecież takie jabłko też można zjeść, mimo, że nie posiada ono żadnych składników)


Co stoi na przeszkodzie żeby jabłko było posiłkiem jednoproduktowym?

Calendar, przechowująca datę oraz obiekt typu Food

Niech mnie ktoś poprawi, ale nie łatwiej trzymać listę dań?
@nerfipro174:

List<Product> products = ((Dish) calendar.getFood()).getProducts();

Czy getProducts() nie zwraca listy produktów, która potem jest w całości castowana do listy posiłków? Zamiast każdy produkt pojedynczo castować do posiłku i zebrać w listę?
@nerfipro174
Kolejny przykład na to, że dziedziczenie to rak programowania i robi tylko ludziom wodę z mózgu. Miałbyś do dyspozycji jedynie structy (i unie) bez dziedziczenia to nie miałbyś takich rozkminek. Jeżeli musisz coś downcastować to na 99,9999999% Twój projekt jest zły.