Šajā apmācībā mēs uzzināsim par Java Generics, kā ar piemēru palīdzību izveidot vispārīgo klasi un metodes un tās priekšrocības.
Java Generics ļauj mums izveidot vienu klasi, saskarni un metodi, ko var izmantot ar dažāda veida datiem (objektiem).
Tas palīdz mums atkārtoti izmantot mūsu kodu.
Piezīme : Generics nedarbojas ar primitīvas veidi ( int
, float
, char
, uc).
Java Generics klase
Mēs varam izveidot klasi, kuru var izmantot ar jebkura veida datiem. Šāda klase ir pazīstama kā Generics klase.
Lūk, kā mēs varam izveidot vispārēju klasi Java:
Piemērs: izveidojiet Generics klasi
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; ) )
Rezultāts
Vispārējā klase atgriež: 5 Vispārīgā klase atgriež: Java programmēšana
Iepriekš minētajā piemērā mēs esam izveidojuši vispārīgu klasi ar nosaukumu GenericsClass. Šo klasi var izmantot darbam ar jebkura veida datiem.
class GenericsClass (… )
Šeit leņķa kronšteina iekšpusē izmantotais T norāda tipa parametru .
Main
Klases iekšpusē mēs esam izveidojuši divus GenericsClass objektus
- intObj - Šeit tipa parametrs T tiek aizstāts ar
Integer
. Tagad GenericsClass darbojas ar veseliem skaitļiem. - stringObj - Šeit tipa parametrs T tiek aizstāts ar
String
. Tagad GenericsClass darbojas ar virkņu datiem.
Java Generics metode
Līdzīgi kā vispārīgo klasē, mēs varam izveidot arī metodi, kuru var izmantot jebkura veida datiem. Šāda klase ir pazīstama kā Generics Method.
Lūk, kā mēs varam izveidot vispārēju klasi Java:
Piemērs: izveidojiet Generics metodi
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); ) )
Rezultāts
Generics metode: nodotie dati: Java programmēšana Generics metode: nodotie dati: 25
Iepriekš minētajā piemērā mēs esam izveidojuši vispārīgu metodi ar nosaukumu genericsMethod.
public void genericMethod(T data) (… )
Šeit parametra tips tiek ievietots aiz modifikatora
public
un pirms atgriešanās veida void
.
Mēs varam izsaukt vispārīgo metodi, ievietojot faktisko tipu un
iekavas iekšpusē pirms metodes nosaukuma.
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Piezīme . Mēs varam izsaukt vispārīgo metodi, neiekļaujot tipa parametru. Piemēram,
demo.genericsMethod("Java Programming");
Šajā gadījumā kompilators var saskaņot tipa parametru, pamatojoties uz metodei nodoto vērtību.
Ierobežoti veidi
Parasti tipa parametrs var pieņemt visus datu tipus (izņemot primitīvos).
Tomēr, ja mēs vēlamies izmantot vispārīgus tikai dažiem specifiskiem veidiem (piemēram, pieņemt skaitļu veidu datus), mēs varam izmantot ierobežotos veidus.
Saistītu veidu gadījumā mēs izmantojam extends
atslēgvārdu. Piemēram,
Tas nozīmē, ka T var pieņemt tikai datus, kas ir A apakštipi.
Piemērs: ierobežoti veidi
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(); ) )
Iepriekš minētajā piemērā mēs esam izveidojuši klasi ar nosaukumu GenericsClass. Ievērojiet izteicienu, pamaniet izteicienu
Šeit tiek izveidots GenericsClass ar norobežotu tipu. Tas nozīmē, ka GenericsClass var tikai darbs ar datu tipiem, kas ir bērni Number
( Integer
, Double
, un tā tālāk).
Tomēr mēs esam izveidojuši generics klases objektu ar String
. Šajā gadījumā mēs saņemsim šādu kļūdu.
GenericsClass obj = new GenericsClass (); iemesls: secinājuma mainīgajam T ir nesaderīgi robežu vienlīdzības ierobežojumi: virknes apakšējās robežas: skaitlis, kur T ir tipa mainīgais: T paplašina numuru, kas deklarēts klasē GenericsClass
Java Generics priekšrocības
1. Kodu atkārtota izmantošana
Ar Java vispārīgo palīdzību mēs varam uzrakstīt kodu, kas darbosies ar dažāda veida datiem. Piemēram,
public void genericsMethod(T data) (… )
Šeit mēs esam izveidojuši vispārēju metodi. Šo pašu metodi var izmantot, lai veiktu darbības ar veseliem skaitļiem, virkņu datiem un tā tālāk.
2. Kompilēšanas laika tipa pārbaude
Veids parametrs patentbrīvo sniedz informāciju par datu izmantoto generic kods veida. Piemēram,
// using Generics GenericsClass list = new GenericsClass();
Šeit mēs zinām, ka GenericsClass strādā Integer
tikai ar datiem.
Tagad, ja mēs mēģinām nodot šai klasei datus, kas nav Integer, programma sastādīšanas laikā radīs kļūdu.
3. Izmanto kopā ar kolekcijām
Kolekciju ietvarā Java tiek izmantots vispārīgo jēdziens. Piemēram,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
Iepriekš minētajā piemērā mēs izmantojām vienu un to pašu ArrayList klasi, lai strādātu ar dažāda veida datiem.
Līdzīgi kā ArrayList
citas kolekcijas ( LinkedList
, Queue
, Maps
, un tā tālāk), ir arī vispārīgs Java.