34 lines
No EOL
1.3 KiB
Markdown
34 lines
No EOL
1.3 KiB
Markdown
# 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 typem `T`
|
|
- 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
|
|
- 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
|
|
- 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 na `T` |