FAV-ZCU/KIV PPA2/09. Třídy s typovým parametrem.md

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 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