To jest druga część o typach generycznych w Kotlin'ie. W tym artykule tłumaczę już nieco bardziej zaawansowane pojęcia.
Jeżeli o typch generycznych nie słyszałeś albo temat znasz tylko powierzchownie, to zachęcam Cię do sprawdzenia postu na stronie SamouczekProgramisty tutaj.
Jeżeli nie czytałeś części pierwszej o generykach to proponuję kliknąć tutaj.
W innym przypadku temat może wydać Ci się zbyt abstrakcyjny.
Nie zawsze jest tak, że klasa generyczna może zwracać tylko obiekty parametru T na jaki została sprametryzowana. W celu rozwiązania Kotlin używa projekcji typów.
Tłumaczone jest to tak, że po stronie użycia (use-site) dostępne będą jedynie te funkcje danej klasy, które zwracają typ T.
Użycie słowa kluczowego out zabezpiecza przed np. zapisem do from.
Kolejnym dosyć zawiłym zagadnieniem są projekcje gwiazdki. Gwiazdka (*) w tym przypadku oznacza, że nie wiemy jakiego typu będziemy używać.
W takim przypadku ważna jest dla nas wartość, a nie typ.
Poza klasami oraz interfejsami generyczne mogą być także funkcje.
Szczególnie przydatne są one kiedy chcemy stworzyć listy generyczne lub zgeneralizować jakiś zbiór elementów. Parametr wyjściowy może być dowolny.
Co ciekawe jednym z rodzajów takich funkcji są Funkcje rozszeszające.
Ostatnim rodzaje jaki zamierzam opisać w tym poście jest konstrukcja, która ogranicza pewien zbiór dozwolonych typów wejściowych.
Taka funkcja przyjmie tylko te typy, które dziedziczą po Comparable.
Działanie bardzo dobrze przedstawia przykład z oficjalnej dokumentacji.
Dziękuję Ci za przeczytanie tego materiału. Celem tego materiału jest jedynie nakreślenie ideii wykorzystania generyków w Kotlinie. Prawdopodobnie w praktyce będzie czekać Cię jeszcze dużo nauki ;)
Zachęcam cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.