Last updated
Last updated
Генеричният клас се създава по същия начин като обикновен клас. Единствената разлика е, че съдържа секция с параметър за типа. Като параметър може да се зададе повече от един тип, като се разделят със запетая. Класовете, които приемат един или повече параметри, са известни като параметризирани класове или параметризирани типове.
Генеричният клас се дефинира със следния формат:
Името на класа е последвано от секция с параметър за типа, ограничена с ъглови скоби ( <> ). Тя определя параметрите на типа (наричани още променливи на типа ) T1 , T2 , ... и Tn .
За да превърнете класа Box в генерик, използвайте generic type декларация като смените кода "public class Box" на "public class Box<T>". Това въвежда типовата променлива T, която може да бъде използвана навсякъде в класа.
След тази промяна класът Box има следния вид:
Както можете да видите, всички срещания на Object се заменят с T . Като аргумент може да се подаде всеки непримитивен тип, който посочите: всеки тип клас, всеки тип интерфейс, всеки масив или дори друга променлива за тип. Същата тази техника може да се приложи и за създаване на генерици интерфейси.
За да създадем обекти от генеричен клас, използваме следния синтаксис.
Пример за генеричния клас Box:
Можете да асоциирате извикването на генеричен тип c извикване на метод, но вместо да подадете аргумент към метод, вие предавате аргумент от тип - в този случай Integer - към самия клас Box.
Забележка: В качеството на тип не можем да използваме примитиви като int, char или double.
Цялостен пример може да бъде разгледан и с помощта на класа Test, разписан по-долу.
В генеричните гласове можем да предадем повече от един параметър.
В Java SE 7 и по-нови можете да замените аргументите на типа, необходими за извикване на конструктора на общ клас с празен набор от аргументи на тип (<>), стига компилаторът да може да определи или изведе аргументите на типа от контекста . Тази двойка ъглови скоби, <>, неофициално се нарича diamond. Например, можете да създадете екземпляр на Box<Integer> със следния оператор: