Programování v jazyce Java
Generické typy, typové parametry
• Generické typy = něco obecně použitelného , zobecnění
• Třídy v Javě mají společného předka, třídu Object (každý objekt je instancí třídy Object).
• Potřebujeme-li pracovat s nějakými objekty, o kterých neznáme typ, můžeme využít společného
předka a pracovat s ním.
• To umožňuje snadnou implementaci kolekcí, ale například i využití reflexe.
Vtip
Deklarace seznamu bez a s generiky
// no generics (obsolete)
public interface List { ... }
// generic type E
public interface List { ... }
1
• do špičatých závorek umístíme symbol — seznam bude obsahovat prvky E (předem neznámého)
typu
• je doporučováno používat velké, jednopísmenné deklarace
• písmeno vystihuje použití — T je type, E je element
• E nahradíme jakoukoliv třídou nebo rozhraním
Jednoduché využití v metodách
E get1(int index);
Object get2(int index);
• get1 vrací pouze objekty, které jsou typu E — je vyžadován speciální typ
• get2 vrací libovolný objekt, tj. musíme pak přetypovávat
boolean add(E o);
• přidává do seznamu prvky typu E
Výhody generik
List numbers1 = new ArrayList();
numbers1.add(1);
numbers1.add(new Object()); // allowed, unwanted
Integer n = (Integer) numbers1.get(0);
List numbers2 = new ArrayList<>();
numbers2.add(1);
numbers2.add(new Object()); // won't compile!
n = numbers2.get(0);
• do seznamu numbers1 lze vložit libovolný objekt
• při získávání objektů se spoléháme na to, že se jedná o číslo
• do numbers2 nelze obecný objekt vložit, je nutné vložit číslo
Motivace
• Chceme seznam různých typů seznamů, tak jej vytvoříme následovně:
List> listOfDifferentLists;
2
• Máme problém — seznam čísel není seznamem objektů:
List numbers = new ArrayList();
List