624 Shares 3759 views

Java rodzajowych: opis i metody

Począwszy od wyglądu języku Java przeszła wiele zmian, które niewątpliwie przyniosły pozytywne momenty w swojej funkcjonalności. Jedną z tych istotnych zmian jest wprowadzenie Java generycznych lub uogólnień. Ta funkcjonalność nie tylko sprawiają, że język bardziej elastyczne i uniwersalne, ale także o wiele bezpieczniejsze pod względem przynosząc typy danych.

Faktem jest, że przed wprowadzeniem leków generycznych w kodzie Java rodzajowy można utworzyć, nie tylko pod względem referencyjnego typu obiektu. Takie linki można przypisać dowolny obiekt. Po tym wszystkim, zajęcia w języku Java są ukryte spadkobiercy klasa obiektu. Jednak takie podejście jest potencjalnym źródłem wielu błędów związanych z rodzajów zabezpieczeń w pozornej konwersji obiektu od obiektu do rodzaju docelowej. Podczas korzystania uogólnień wszystkie odlewy wykonywane są w sposób dorozumiany i samoczynnie, nawet potencjalne błędy.

Java rodzajowych: opis i przykład

Rozważmy prosty przykład zastosowania uogólnienia do regularnych zajęć na poniższym rysunku. A następnie przystąpić do szczegółowego zbadania wszystkich subtelności i niuanse Java rodzajowy.

Należy zwrócić uwagę na sposób, w którym występuje deklaracja klasy Pair. Natychmiast po nazwie klasy otwarte wsporników kątowych, które oznaczone literą T. Jest to rodzaj wypełniacza, która jest w trakcie procesu tworzenia wystąpienia tej klasy będą zastąpione określonego typu. Wygląda to następująco: Para obj = new Pair (). Należy zauważyć, że zamiast T można określić dowolną literę, ale co do zasady, należy T, V lub E.

Uwaga: począwszy od ósmej wersji Java, określając typ docelowy podczas deklarowania kątowniki odniesienia w konstruktorze można pozostawić puste. Więc przykładem może być zapisane jak wyżej: Pair obj = new Pair ().

Kiedy klasa jest zadeklarowany w taki sposób, a następnie w jego ciele zamiast konkretnych typów pól, linków, obiektów zwracanych przez metody można wykorzystać ten list. Ponieważ T podczas tworzenia obiektu klasy zastępuje określonego typu, pierwsze i drugie pola w tym przypadku być typu Integer.

Zgodnie z logiką argumentów i firstItem secondItem, w odniesieniu do odpowiedniego konstruktora musi być typu Integer lub podklasy. Jeśli próbę przesłania typ danych, który różni się od tego, co zostało określone podczas tworzenia obiektu, kompilator nie pozwoli tego błędu. Tak więc konstruktor argumenty gdy obiekt będzie następujący: para obj = nowa para (nowa całkowita (1), nowe całkowita (2)). To samo odnosi się do argumentów i metod setFirst setSecond. A jak już zapewne domyślasz, metody getFirst getSecond i zwróci wartość typu Integer.

Uogólnione z kilku parametrów typów klasowych

W klasach ogólnych można też zadeklarować wiele parametrów typu, które są ustawione w nawiasach przecinkami. Przeprojektowany przez przypadku klasy Pair jest przedstawiony poniżej.

Jak widać, jeśli utworzyć wystąpienie tej klasy w nawiasach ostrych należy wskazać taką samą liczbę typów jako parametrów. Jeśli jesteś zaznajomiony z tego typu struktury danych mapy, można zobaczyć, że używa dokładnie tej samej zasadzie. Tam pierwszy argument określa typ klucza, a drugi – typ wartości. Należy zauważyć, że typy transmitowane kiedy an object argumenty mogą się pokrywać. Na przykład, następujące ogłoszenie Para instancja klasy jest absolutnie poprawne: Para obj.

Niektóre funkcje uogólnień

Zanim przejdziemy dalej, należy zauważyć, że kompilator Java nie tworzyć różne wersje Pair klasy. W rzeczywistości, w procesie sporządzania rodzajem uogólnione wszystkie informacje są usuwane. Zamiast przynieść odpowiednie typy, tworząc specjalną wersję klasy Pair. Jednak w programie jest jeszcze tylko ogólna wersja klasy. Proces ten nazywany jest w Jawa Typ Generic czyszczenia.

Uwaga ważny punkt. Linki do różnych wersji tej samej klasy java rodzajowy nie można wskazać jednego i tego samego obiektu. Oznacza to, załóżmy, że mamy dwa linki: para obj1 i Pair obj2. W konsekwencji, zgodnie obj1 = obj2 błąd. Chociaż obie zmienne są typu Para , obiekty, do których się odnoszą, są różne. Jest to doskonały przykład tego rodzaju zabezpieczeń w Java rodzajowy.

Ograniczenia dotyczące klas generycznych

Ważne jest, aby wiedzieć, że uogólnienia mogą być stosowane tylko do typów referencyjnych, czyli przekazać parametry rodzajowe klasy Java argument musi być typu klasy. Te typy proste, takie jak, na przykład, podwójne lub długości, nie może być przenoszone. Innymi słowy, co następuje linia Pair deklaracja klasy nie jest dozwolone: Para obj. Jednakże ograniczenie to nie jest to poważny problem, ponieważ nie jest odpowiednia klasa wrapper Java dla każdego rodzaju prymitywnego. Ściśle rzecz biorąc, jeśli para klasa chcesz hermetyzacji liczbą całkowitą, a wartość logiczna avtoupakovka robi wszystko dla Ciebie: Para obj = new Pair (25, true).

Innym poważnym ograniczeniem jest to, że nie można utworzyć egzemplarz typu parametrów. Na przykład następujący wiersz spowoduje błąd kompilacji: pierwszy T = new T (). Jest to oczywiste, ponieważ nie wiem z góry czy argument przeszedł pełną klasę lub abstrakcyjne, a nawet interfejs. To samo odnosi się do tworzenia tablic.

ograniczone typy

Dość często zdarzają się sytuacje, kiedy jest to konieczne, aby ograniczyć listę typów, które mogą być przekazywane jako argument do Java klasy rodzajowe. Załóżmy, że w naszej klasie Pair chcemy otaczać jedynie wartości liczbowe dla dalszych operacji matematycznych na nich. Aby to zrobić, musimy zdefiniować górny limit typu parametru. Realizowane jest to za pomocą nadklasą reklam odziedziczonych wszystkie argumenty przekazywane w nawiasach kątowych. będzie wyglądać następująco: klasa Para . W ten sposób, kompilator stwierdzi, że zamiast parametr T może być podstawiona lub klasy ilość albo jeden z jego podklasy.

Jest to powszechny odbiór. Takie ograniczenia są często stosowane w celu zapewnienia zgodności parametrów typu w jednej i tej samej klasy. Rozważmy przykład w naszej klasie Pair: klasy Para . Tu poinformować kompilator, że typ T może być dowolna, a typ V musi być albo typu T lub jeden z jego podklasy.

Ograniczenie „dno” jest dokładnie taki sam sposób, ale zamiast słowa rozciąga się pisze Super słowo. Że jest klasyfikowany klasy Pair mówi, że zamiast T może być podstawiony lub ArrayList lub jakiejkolwiek klasy lub interfejsu, który dziedziczy.

Generic metody Java i konstruktorzy

W Javie uogólnienia mogą być stosowane nie tylko na zajęciach, ale także metod. Na przykład metoda ogólna może zostać uznane w regularnych zajęciach.

Jak widać na powyższym rysunku, metoda reklamy uogólnić to nic wielkiego. Wystarczająco przed zwracany typ metody umieścić kątowniki i określić parametry typu w nich.

Jeśli wszystko odbywa się podobnie do konstruktora:

nawiasy w tym przypadku postawić przed nazwą projektanta, ponieważ nie ma on wartości zwracanej. Wynikiem obu programów będą:

liczba całkowita

sznur