Klasy generyczne - gdzie mają zastosowanie

0

Witam. Temat wrzuciłem do Javy, ale pewnie gdzieś indziej również mógłby być. Parokrotnie podchodziłem do zagadnienia typów generycznych i zawsze mniej więcej z tym samym skutkiem. Tzn. nie jest chyba trudno ich używać (listy, hashMapy, requestMapping itd.), natomiast ciężko mi sobie wyobrazić ich tworzenie tak żeby były w rzeczywisty sposób użyteczne w danym projekcie małego lub średniego rozmiaru. Czy aby nie jest tak, że całą aplikację desktopową, albo grę, albo aplikację webową można stworzyć nie definiując żadnej klasy generycznej i nie odczuwając jej braku, a przydaje się to głównie przy tworzeniu narzędzi o ogólnym zastosowaniu, albo tworząc jakiś specyficzny wzorzec projektowy?

2

Tak. Jeśli robisz aplikację to możesz nie potrzebować własnych generycznych klas.
Ale czasem możesz użyć, bywają przydatne nawet w małych projektach - zależy od przypadku i wyobraźni.

1

Generyczne klasy jak nazwa wskazuje są do generycznych rzeczy. Najprostsze generoczne zachowanie jakie mogę sobie wyobrazić to wymienione przez ciebie kolekcje. Jeśli w projekcie nie masz generycznych zachowań nie potrzebujesz generycznych klas

1
paranoise napisał(a):

Witam. Temat wrzuciłem do Javy, ale pewnie gdzieś indziej również mógłby być. Parokrotnie podchodziłem do zagadnienia typów generycznych i zawsze mniej więcej z tym samym skutkiem. Tzn. nie jest chyba trudno ich używać (listy, hashMapy, requestMapping itd.), natomiast ciężko mi sobie wyobrazić ich tworzenie tak żeby były w rzeczywisty sposób użyteczne w danym projekcie małego lub średniego rozmiaru. Czy aby nie jest tak, że cały aplikację desktopową, albo grę, albo aplikację webową można stworzyć nie definiując żadnej klasy generycznej i nie odczuwając jej braku, a przydaje się to głównie przy tworzeniu narzędzi o ogólnym zastosowaniu, albo tworząc jakiś specyficzny wzorzec projektowy?

No masz rację, nie jest to jakiś super często ożywany element języka, ale swoje zastosowania ma

  • List<Integer>, Map<Integer>, Set<Integer>
  • Optional<Integer>, Either<Integer, String>
  • Future<Integer>
  • Serializer<Integer>

I pewnie by się znalazło wiele innych.

Jeśli siedzisz w swojej domenie biznesowej, to zgadzam się że właściwie wszystko co Ci dają generyki możesz załatwić polimorfizmem; ale kiedy potrzebujesz zrobić coś co przecina więcej poziomów abstrakcji to stają się bardziej przydatne.

1

@paranoise: Zdarzało mi się korzystać z klas czy metod generycznych, ale to raz na ruski rok. Takie klasy to głownie bibliotek standardowa + inne biblioteki + frameworki.
Najwięcej klas generycznych napisał chyba ucząc się... generyków w Javie xD

2

Częściej wycinałem generyki niż dodawałem ;) bardzo łatwo się zakopać w tematy kowariancji/kontrawariancji.

Najczesciej zastosowanie widzialem przy kontenerach na dane - kolekcje, optionale, futury, generalnie monady

1

Generyczne klasy zdarza mi sie pisać bardzo rzadko. Ale za to generyczne metody dużo częściej, szczególnie jak możesz sobie wygodnie przekazać do funkcji jakieś Supplier<T> albo Function<A,B> i nagle bardzo ładnie można sobie zwinąć jakiś powtarzalny kawałek kodu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1