Bylo by hezké, kdybychom mohli napsat jedinou metodu třídění, která by mohla třídit prvky v celočíselném poli, řetězcovém poli nebo pole libovolného typu, které podporuje objednávání.
Obecné metody Java a generické třídy umožňují programátorům specifikovat pomocí jediné deklarace metody sadu souvisejících metod nebo pomocí jediné deklarace třídy sadu souvisejících typů.
Generika také poskytují bezpečnost typu kompilace, která umožňuje programátorům zachytit neplatné typy v době kompilace.
Pomocí konceptu Java Generic bychom mohli napsat obecnou metodu Chcete-li řadit pole objektů, vyvolejte obecnou metodu s poli Integer, Double Arrays, String Arrays atd., aby se prvky pole seřadily.
Obecné metody
Můžete psát jediné generické prohlášení o metodě, které může být ca. plné argumentů různých typů. Na základě typů argumentů předaných obecné metodě kompilátor zpracovává každé volání metody odpovídajícím způsobem. Níže jsou uvedena pravidla pro definování obecných metod –
-
Všechna obecná prohlášení o metodách mají část parametru typu ohraničenou hranatými závorkami (< a >), který předchází typu návratu metody (< E > v dalším příkladu ).
-
Každá část parametru typu obsahuje jeden nebo více parametrů typu oddělených čárkami. Parametr typu, známý také jako proměnná typu, je identifikátor, který určuje obecný název typu .
-
Parametry typu lze použít k deklaraci návratového typu a jako zástupné symboly pro typy argumentů předaných generické metodě, které se označují jako argumenty skutečného typu.
-
Tělo generické metody je deklarováno jako tělo jakékoli jiné metody. Všimněte si, že parametry typu mohou představovat pouze referenční typy, nikoli primitivní typy (jako int, double a char).
Příklad
Následující příklad ukazuje, jak jsme může tisknout pole různého typu pomocí jedné obecné metody –
Výsledkem bude následující výsledek –
Výstup
Array integerArray contains:1 2 3 4 5 Array doubleArray contains:1.1 2.2 3.3 4.4 Array characterArray contains:H E L L O
Parametry ohraničeného typu
Mohou nastat situace, kdy budete chtít omezit typy typů, které lze předat parametru typu. Například metoda, která funguje na číslech, může chcete pouze přijímat instance Number nebo jeho podtříd. K tomu slouží parametry ohraničeného typu.
Chcete-li deklarovat parametr ohraničeného typu, vypište název parametru typu, za ním následuje klíčové slovo extends a za ním jeho horní mez.
Příklad
Následující příklad ilustruje, jak se extends v obecném smyslu používá k označení buď „extends“ (jako ve třídách), nebo „implementuje“ (jako v rozhraních) . Tento příklad je obecná metoda pro vrácení největšího ze tří srovnatelných objektů –
Výsledkem bude následující výsledek –
Výstup
Max of 3, 4 and 5 is 5Max of 6.6,8.8 and 7.7 is 8.8Max of pear, apple and orange is pear
Obecné třídy
Deklarace obecné třídy vypadá jako negenerická deklarace třídy, kromě toho, že za názvem třídy následuje část parametru typu.
Stejně jako u obecné metody, sekce parametrů typu generické třídy může mít jeden nebo více parametrů typu oddělených čárkami. Tyto třídy jsou známé jako parametrizované třídy nebo parametrizované typy, protože přijímají jeden nebo více parametrů.
Příklad
Následující příklad ukazuje, jak můžeme definovat obecnou třídu –
To přinese následující výsledek –
Výstup
Integer Value :10String Value :Hello World