Zaawansowane wykorzystanie typów generycznych w języku Java

download Zaawansowane wykorzystanie typów generycznych w języku Java

of 28

description

Devcast "Zaawansowane wykorzystanie typów generycznych w języku Java" zawiera treści związane z wykorzystywaniem i tworzeniem typów generycznych. Na początku są omówione podstawowe mechanizmy użycia, szczególnie w kontekście kolekcji języka Java. Następnie, przechodzimy do bardziej zaawansowanych zagadnień, takich jak refleksja, metody clone i equals, czy też interfejsy generyczne. Przedstawiamy także zagadnienia, które są specyficzne dla języka Java w kontekście typów generycznych, takich jak wymazywanie typów.

Transcript of Zaawansowane wykorzystanie typów generycznych w języku Java

Zaawansowane wykorzystanie typw generycznych w jzyku JavaMateriay pochodz ze strony: www.devcastzone.com

copyright BNS MEDIA

www.devcastzone.com

Podstawowe uycie typw generycznych Konkretne typy generyczneZaawansowane wykorzystanie typw generycznych w jzyku Java

copyright BNS MEDIA

www.devcastzone.com

Tred moduu1. 2. 3. 4. 5. Przyczyny powstania generykw Generyki pochodzenie Podstawowe zasady korzystania z generykw Typy konkretne Kod generyczny a kod odziedziczony (ang. legacy code) 6. Typy generyczne a czas wykonania programu

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

3

Przyczyny powstania generykw Java bez generykw oglne, niekonkretne kolekcje List, Set, Map mogy przechowywad dowolne obiekty Elastycznod? Tylko pozorna

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

4

Przyczyny powstania generykw Przykad: moliwod istnienia listy zawierajcej elementy rnych typw:List kolekcja = new ArrayList(); kolekcja.add(3); kolekcja.add("tekst"); kolekcja.add(5);

Niegeneryczna kolekcja moe zawierad dowolne dane!Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

copyright BNS MEDIA

5

Przyczyny powstania generykw

Rozwizanie zastosowanie generycznej listy

List kolekcja = new ArrayList(); kolekcja.add(3); kolekcja.add("tekst"); kolekcja.add(5);

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

6

Przyczyny powstania generykw rodowisko zgosi bd na etapie kompilacji W tym przypadku lista moe przechowywad tylko liczby cakowite Oglnie, lista moe zawierad obiekty podanego typu lub typw po nim dziedziczcych

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

7

Generyki pochodzenie Wprowadzone w Java Standard Edition 5.0

Podobne mechanizmy: szablony w C++, typy generyczne na platformie .NET (np. w C#, VB.NET)

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

8

Generyki pochodzenie Mona korzystad z nich we wszystkich aplikacjach, ktre korzystaj z jzyka Java w wersji 5 Nie mona z nich korzystad w Java ME w tej technologii jzyk Java jest obsugiwany w wersji 1.3!

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

9

Generyki Podstawowe zasady Skadnia:o

Typy generyczne podaje si wewntrz nawiasw ostrych, np. Typy generyczne podaje si tu za nazw klasy/interfejsu, np. List

o

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

10

Generyki Podstawowe zasady Skadnia:o

W przypadku wywoao generycznych konstruktorw, typ generyczny znajduje si za nazw klasy, np. new ArrayList() W bardziej zaawansowanych wywoaniach metod, typ pojawia si przed nazw metody, np. Klasa.metoda()

o

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

11

Typy konkretne Generyczny typ konkretny to zwyka nazwa typu, ktry jest stosowany wobec okrelonej klasy W przypadku generycznej listy List, typem konkretnym jest Integer

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

12

Typy konkretne Dziedziczenie na poziomie zwykych klas jest moliwe i jest czsto stosowane:List kolekcja = new ArrayList();

Klasa ArrayList implementuje interfejs List, a typy generyczne si zgadzaj OK.

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

13

Typy konkretne Analogiczna sytuacja w przypadku typw generycznych:List kolekcja = new ArrayList();

Klasa Integer dziedziczy po Number, ale taka konstrukcja jest nieprawidowa!

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

14

Typy konkretne Przyczyna bdu?

Zmienna typu List pozwala na dodawanie dowolnych liczb typu Integer, Float, Byte (i innych wrapperw typw prymitywnych)

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

15

Typy konkretne Konkretny obiekt ArrayList nie moe pozwolid na dodanie licz innych typw

Problem!

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

16

Typy konkretne Rozwizanie parametry (wyraenia) wieloznaczne

Wicej na ten temat w kolejnych moduach

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

17

Kod generyczny a kod odziedziczony Cay czas mona wykorzystywad stare, niegeneryczne wersje kolekcji i innych klas Powd? Legacy code kod odziedziczony niechd do zerwania kompatybilnoci wstecznej stare, niegeneryczne aplikacje mog dziaad w nowych wersjach Javy

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

18

Kod generyczny a kod odziedziczony Efekt stosowania niegenerycznego kodu ostrzeenie generowane przez kompilator

Ich stosowanie jest wysoce niezalecane poza moliwoci uzyskania bdw, kod na og staje si bardziej skomplikowany

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

19

Kod generyczny a kod odziedziczony Java dopuszcza czenie typw generycznych i niegenerycznych:

List lista = new ArrayList(); List drugaLista = new ArrayList();

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

20

Kod generyczny a kod odziedziczony Pierwsza z instrukcji nie ma sensu (lista typu List jest po prostu niegeneryczna)

Druga bdzie dziaad w porzdku, bo typ zmiennej jest generyczny Efekt w obu przypadkach: ostrzeenia kompilatoraZaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

copyright BNS MEDIA

21

Typy generyczne a czas wykonania programu Generyki funkcjonuj na etapie kompilacji programu Pniej poszczeglne konstrukcje nie s weryfikowane

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

22

Typy generyczne a czas wykonania programu Naley wic uwaad, aby wszdzie, gdzie si da, stosowad konstrukcje generyczne

Zmniejszaj one ryzyko popenienia bdu i upraszczaj sporo konstrukcji w kodzie (np. rzutowania)

copyright BNS MEDIA

Zaawansowane wykorzystanie typw generycznych w jzyku Javawww.devcastzone.com

23

Zaawansowane wykorzystanie typw generycznych w jzyku Java program penego szkolenia1. Podstawowe uycie typw generycznych. Konkretne typy generyczneo o o

oo o

Przyczyny powstania generykw Generyki pochodzenie Podstawowe zasady korzystania z generykw Typy konkretne Kod generyczny a kod odziedziczony (ang. legacy code) Typy generyczne a czas wykonania programu

2. Podstawowe uycie typw generycznych. Wyraenia wieloznaczne (wildcards)o o o o o o

Przyczyny stosowania wyraeo wieloznacznych Wyraenia wieloznaczne nieograniczone (unbounded) Zastosowanie Wyraenia wieloznaczne ograniczone (bounded) Zastosowanie Porwnanie obu rodzajw wyraeoTworzenie aplikacji z uyciem biblioteki Hibernatewww.devcastzone.com

copyright BNS MEDIA

24

Zaawansowane wykorzystanie typw generycznych w jzyku Java program penego szkolenia3. Metody generyczneo o o o o o

Sens istnienia generycznych metod Generyki i ich wpyw na wywoania metod Tworzenie metod generycznych Wyraenia wieloznaczne w metodach generycznych Parametry typw Konstrukcja super Wprowadzenie typw generycznych podczas tworzenia klas Wykorzystywanie typu generycznego w obrbie klasy Wyraenia wieloznaczne a klasy generyczne Zasig i widocznod parametru typu Kontekst metody Kontekst klasy Kontekst interfejsu Kontekst statyczny Dziedziczenie po typie wyznaczonym przez parametr typuTworzenie aplikacji z uyciem biblioteki Hibernatewww.devcastzone.com

4. Parametry typw generycznych. Klasy generyczneo o o

5. Parametry typu a dziedziczenie, zasig, kontekst statycznyo o o o o ocopyright BNS MEDIA

25

Zaawansowane wykorzystanie typw generycznych w jzyku Java program penego szkolenia6. Argumenty typw generycznych (type arguments)o o o o

Uycie argumentw typu Dopuszczalne argumenty typu Precyzowanie argumentw dla wywoao funkcji i tworzenia instancji obiektw Homogenicznod i heterogenicznod zagniedone operatory wieloznaczne Mieszanie typw parametryzowanych z goymi problemy: Kolekcje goe i parametryzowane Interfejsy

7. Mieszanie typw generycznych z kodem uywajcym typw goych (raw types)o

o

Kolekcje weryfikowalne remedium? Wielokrotne uycie implementacja tego samego interfejsu wicej ni raz Implementacja generycznych interfejsw a dziedziczenie Wyjtki od regu? Metoda equals cele, moliwoci, puapki Metoda clone cele, moliwoci, puapkiTworzenie aplikacji z uyciem biblioteki Hibernatewww.devcastzone.com

8. Interfejsy generyczneo o o

9.

Implementacja metod equals i cloneo o

copyright BNS MEDIA

26

Zaawansowane wykorzystanie typw generycznych w jzyku Java program penego szkolenia10. Wymazywanie typw (type erasure), zamiecanie sterty, typy generyczne a obsuga wyjtkwo

Wymazywanie typw Schemat dziaania Konsekwencje

o o

Zamiecanie sterty Obsuga wyjtkw a typy generyczne Tworzenie instancji obiektu Class Sprawdzenie poprawnoci typu w czasie wykonania Rzutowanie Informacje statyczne i dynamiczne Typy generyczne a typy niegeneryczne Typy parametryzowane a typy goe Dostp do informacji o metodzie Dostp do informacji o parametrach typuTworzenie aplikacji z uyciem biblioteki Hibernatewww.devcastzone.com

11. Refleksja - przekazywanie informacji o typach w czasie wykonaniao o o o

12. Refleksja - pozyskiwanie informacji o typach w czasie wykonaniao o o o

o

copyright BNS MEDIA

27

Zaawansowane wykorzystanie typw generycznych w jzyku Java http://www.devcastzone.com/course,zaawansowanewykorzystanie-typow-generycznych-w-jezyku-java

Zapraszamy

copyright BNS MEDIA

Tworzenie aplikacji z uyciem biblioteki Hibernatewww.devcastzone.com

28