Java Generics (с примери)

В този урок ще научим за Java Generics, как да създадем клас и методи за генерици и неговите предимства с помощта на примери.

Java Generics ни позволява да създадем един клас, интерфейс и метод, които могат да се използват с различни видове данни (обекти).

Това ни помага да използваме повторно нашия код.

Забележка : Generics не работи с примитивни типове ( int, float, char, и т.н.).

Java Generics Class

Можем да създадем клас, който може да се използва с всякакъв тип данни. Такъв клас е известен като Generics Class.

Ето как можем да създадем родов клас в Java:

Пример: Създайте Generics Class

 class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )

Изход

 Общият клас връща: 5 Общият клас връща: Програмиране на Java

В горния пример създадохме общ клас, наречен GenericsClass. Този клас може да се използва за работа с всякакъв вид данни.

 class GenericsClass (… )

Тук T, използван вътре в ъгловата скоба, показва параметъра на типа . Вътре в Mainкласа сме създали два обекта на GenericsClass

  • intObj - Тук параметърът тип T се заменя с Integer. Сега GenericsClass работи с цели числа.
  • stringObj - Тук параметърът тип T се заменя с String. Сега GenericsClass работи с низови данни.

Java Generics Method

Подобно на родовия клас, ние също можем да създадем метод, който може да се използва с всякакъв тип данни. Такъв клас е известен като Generics Method.

Ето как можем да създадем родов клас в Java:

Пример: Създайте генеричен метод

 class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )

Изход

 Общ метод: Предадени данни: Програмиране на Java Общ метод: Предадени данни: 25

В горния пример създадохме родов метод, наречен genericsMethod.

 public void genericMethod(T data) (… )

Тук параметърът на типа се вмъква след модификатора publicи преди типа на връщане void.

Можем да извикаме генеричния метод, като поставим действителния тип и в скобата преди името на метода.

 demo.genericMethod("Java Programming"); demo.genericMethod(25);

Забележка : Можем да извикаме генеричния метод, без да включваме параметъра type. Например,

 demo.genericsMethod("Java Programming");

В този случай компилаторът може да съответства на параметъра тип въз основа на стойността, предадена на метода.

Ограничени типове

Като цяло параметърът тип може да приема всякакви типове данни (с изключение на примитивни типове).

Ако обаче искаме да използваме генерични продукти само за някои специфични типове (като например приемаме данни от числови типове), тогава можем да използваме ограничени типове.

В случай на обвързани типове, ние използваме extendsключовата дума. Например,

 

Това означава, че Т може да приема само данни, които са подтипове на А.

Пример: Обвързани типове

 class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )

В горния пример създадохме клас, наречен GenericsClass. Забележете израза, забележете израза

  

Тук GenericsClass се създава с ограничен тип. Това означава, GenericsClass може да работи само с типове данни, които са деца на Number( Integer, Doubleи т.н.).

Създадохме обаче обект от родовия клас с String. В този случай ще получим следната грешка.

GenericsClass obj = нов GenericsClass (); причина: изводната променлива T има несъвместими ограничения за равенство на границите: Долни граници на низа: Число, където T е променлива на типа: T се простира Номер, деклариран в клас GenericsClass

Предимства на Java Generics

1. Многократна употреба на кода

С помощта на генерични продукти в Java можем да напишем код, който да работи с различни видове данни. Например,

 public void genericsMethod(T data) (… )

Тук създадохме генеричен метод. Същият този метод може да се използва за извършване на операции с цели числа, низови данни и т.н.

2. Проверка на типа по време на компилация

Параметърът тип на генеричните лекарства предоставя информация за типа данни, използвани в генеричния код. Например,

 // using Generics GenericsClass list = new GenericsClass();

Тук знаем, че GenericsClass работи Integerсамо с данни.

Сега, ако се опитаме да предадем данни, различни от Integer, на този клас, програмата ще генерира грешка по време на компилация.

3. Използва се с колекции

Рамката за колекции използва концепцията за генерични продукти в Java. Например,

 // creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();

В горния пример използвахме един и същ клас ArrayList за работа с различни видове данни.

Подобно на ArrayListдруги колекции ( LinkedList, Queue, Maps, и т.н.) също са общи в Java.

Интересни статии...