1.3 KiB
1.3 KiB
Třídy s typovým parametrem
- často potřeba kolekce pro různé datové typy
- není vhodné vytvářet samostatné kolekce (třídy) pro různé datové typy
Řešení pomocí Object
- všechny třídy dědí z Object
- vkládání není problém
- problém
- při vybrání prvku je potřeba jej přetypovat
- případná chyba se objeví až za běhu programu
Obalovací třída
- anglicky wrapper
- poskytuje metody, které provádějí přetypování na správnou třídu
- skrývá vnitřní implementaci s
Object
- problém
- je potřeba ji vytvořit pro každý datový typ
Generická třída
- "správné" řešení
- třída s typovým parametrem
class MyStack<T>
- datový typ
Object
poté nahradíme typemT
- bohužel nefunguje všude
- typ
T
pouze přebíráme a vracíme - vnitřně používáme
Object
, který poté přetypujeme
- typ
- datový typ
- typovým parametrem nemůže být primitivní datový typ
- využijeme obalovací třídu (
Integer
,Double
, ...) - přetypování (boxing a unboxing) probíhá automaticky, je ale dobré o něm vědět
- využijeme obalovací třídu (
- někdy je potřeba, aby typový parametr něco uměl
- je možné použít rozhraní
class MyStack<T extends IProcessable>
- pokud potřebujeme použít nějakou metodu tohoto rozhraní ve třídě, můžeme
Object
přetypovat naT