Table of Contents

11 - Java generics

Možné řešení z minulého cvičení

https://gitlab.fel.cvut.cz/B181_B6B36OMO/seminar/tree/master/cv10_solution

Konzultace

Konzultace ohledně návrhu semestrálního projektu

Teorie

Viz přednáška: generics.pdf

Zadání

Stahněte si šablony projektů na: https://gitlab.fel.cvut.cz/B191_B6B36OMO/b191_b6b36omo/tree/master/cv11.1_assigment https://gitlab.fel.cvut.cz/B191_B6B36OMO/b191_b6b36omo/tree/master/cv11.2_assigment https://gitlab.fel.cvut.cz/B191_B6B36OMO/b191_b6b36omo/tree/master/cv11.3_assigment https://gitlab.fel.cvut.cz/B191_B6B36OMO/b191_b6b36omo/tree/master/SystemProPripravuClankuDoCasopisu

Dnešní cvičení ma čtyři části.

cv11.1

V této části cvičení máte třídu Container, která má reprezentovat generický kontejner pro jakákoli data. Doplňte vše potřebné podle hlavní metody main.

cv11.2

Doplňte kostru metod a tříd do funkčního celku.

Aplikace obsahuje 3 třídy:

  MyListItem - reprezentuje prvek v seznamu.
  MyList - spojový seznam.
  MyListIterator - iterátor pro danou datovou strukturu

Jak se má iterátor přesně chovat najdete nejlépe v dokumentaci interface ListIterator a samozřejmě v testech. Iterátor bude umět všechny zde popisované operace. Oproti knihovní implementaci není potřeba detekovat změny na seznamu, které nejsou způsobené aktuálním iterátorem (např. souběžná modifikace seznamu pomocí dvou iterátorů by měla vyhodit výjimku) - to neřešte (nebo jen kdo chce, ale není to pokryto testy). Metody, které mají vyhazovat nějaké výjimky, jsou v kostře kódu patřičně zdokumentované.

Veškeré požadované části úkolu jsou pokryté testy.

cv11.3

Tato část je zaměřená na procvičení java reflexe. Cíl aplikace je, aby ukládala informace o jakékoli třídě do metamodelu. Při tomto ukládání všechny informace vypisujte o dané třídě: Název třídy, anotace třídy, atributry (název, hodnota), anotace u atributů. Po spuštění aplikace uvidíte jak dlouho trvá inspekce 2 tříd pomocí reflexe.

nápověda:

Class clazz = object.getClass();

Field[] fields=clazz.getDeclaredFields();

Pokročilé

cv11.4 - SystemProPripravuClankuDoCasopisu

Zde je celý system, který obsahuje vrstvy popsané níže. Testy nespouštějte, protože nemáte připojenou aplikaci k databázi. Jedná se ale o klasický příklad chain of responsibility. Každá vrstva má svůj účel.

Ve třídě GenericHibernateJpaDao naimplementujte metody: getAll(), getByProperty() a remove()

nápověda:

prohlédněte si celou třídu GenericHibernateJpaDao