Šioje pamokoje sužinosime apie „Java Generics“, kaip pavyzdžių pagalba sukurti bendrinių klasę ir metodus bei jų pranašumus.
„Java Generics“ leidžia mums sukurti vieną klasę, sąsają ir metodą, kuriuos galima naudoti su skirtingų tipų duomenimis (objektais).
Tai padeda mums pakartotinai naudoti savo kodą.
Pastaba : Generics neveikia su primityvios rūšys ( int
, float
, char
, ir tt).
„Java Generics“ klasė
Galime sukurti klasę, kurią būtų galima naudoti su bet kokio tipo duomenimis. Tokia klasė vadinama Generics klase.
Štai kaip galime sukurti „Java“ generikų klasę:
Pavyzdys: sukurkite „Generics“ klasę
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; ) )
Rezultatas
„Generic Class“ grąžina: 5 „Generic Class“ grąžina: „Java“ programavimas
Ankstesniame pavyzdyje mes sukūrėme bendrinę klasę pavadinimu GenericsClass. Ši klasė gali būti naudojama dirbant su bet kokio tipo duomenimis.
class GenericsClass (… )
Čia kampo kronšteino viduje naudojamas T nurodo tipo parametrą .
Main
Klasės viduje mes sukūrėme du „GenericsClass“ objektus
- intObj - Čia tipo parametras T pakeičiamas
Integer
. Dabar „GenericsClass“ veikia su sveikaisiais skaičiais. - stringObj - Čia tipo parametras T pakeičiamas
String
. Dabar „GenericsClass“ veikia su eilutės duomenimis.
„Java Generics“ metodas
Panašiai kaip ir generikų klasėje, mes taip pat galime sukurti metodą, kurį galima naudoti su bet kokio tipo duomenimis. Tokia klasė yra žinoma kaip Generics metodas.
Štai kaip galime sukurti „Java“ generikų klasę:
Pavyzdys: sukurkite „Generics“ metodą
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); ) )
Rezultatas
Generics metodas: perduoti duomenys: Java programavimas Generics metodas: perduoti duomenys: 25
Ankstesniame pavyzdyje mes sukūrėme bendrą metodą, pavadintą genericsMethod.
public void genericMethod(T data) (… )
Čia tipo parametras įterpiamas po modifikatoriaus
public
ir prieš grąžinimo tipą void
.
Mes galime iškviesti generinį metodą, prieš metodo pavadinimą įdėdami tikrąjį tipą ir
į skliaustą.
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Pastaba : Mes galime iškviesti generinį metodą neįtraukdami tipo parametro. Pavyzdžiui,
demo.genericsMethod("Java Programming");
Tokiu atveju kompiliatorius gali suderinti tipo parametrą pagal metodui perduotą vertę.
Apriboti tipai
Paprastai tipo parametras gali priimti bet kokius duomenų tipus (išskyrus primityvius tipus).
Tačiau jei norime naudoti generinius vaistus tik tam tikriems tipams (pvz., Priimti skaičių tipų duomenis), galime naudoti ribotus tipus.
Susietų tipų atveju naudojame extends
raktinį žodį. Pavyzdžiui,
Tai reiškia, kad T gali priimti tik tuos duomenis, kurie yra A potipiai.
Pavyzdys: Apriboti tipai
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(); ) )
Ankstesniame pavyzdyje mes sukūrėme klasę pavadinimu GenericsClass. Pastebėkite išraišką, pastebėkite išraišką
Čia sukurtas „GenericsClass“ su ribotu tipu. Tai reiškia, GenericsClass gali tik darbas su duomenų tipų, kurie yra vaikai Number
( Integer
, Double
, ir tt).
Tačiau mes sukūrėme generikų klasės objektą String
. Tokiu atveju gausime šią klaidą.
GenericsClass obj = new GenericsClass (); Priežastis: išvados kintamasis T turi nesuderinamus ribų lygybės apribojimus: Stygos apatinės ribos: skaičius, kur T yra tipo kintamasis: T tęsiasi Skaičius, deklaruotas klasėje GenericsClass
„Java Generics“ pranašumai
1. Kodo pakartotinis naudojimas
„Java“ generikų pagalba galime parašyti kodą, kuris veiks su skirtingų tipų duomenimis. Pavyzdžiui,
public void genericsMethod(T data) (… )
Čia mes sukūrėme generinį metodą. Tas pats metodas gali būti naudojamas atliekant veiksmus su sveikaisiais skaičiais, eilutės duomenimis ir pan.
2. Kompiliavimo laiko tipo tikrinimas
Tipo parametras generiniai vaistai, teikia informaciją apie naudojamų generinių vaistų kodas duomenų tipo. Pavyzdžiui,
// using Generics GenericsClass list = new GenericsClass();
Čia mes žinome, kad „GenericsClass“ dirba Integer
tik su duomenimis.
Dabar, jei bandysime šiai klasei perduoti kitus duomenis nei „Integer“, programa sukurs klaidą kompiliavimo metu.
3. Naudojamas kartu su kolekcijomis
Kolekcijų sistemoje naudojama „Java“ generikų sąvoka. Pavyzdžiui,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
Ankstesniame pavyzdyje mes naudojome tą pačią „ArrayList“ klasę, kad galėtume dirbti su skirtingų tipų duomenimis.
Panašus į ArrayList
kitus kolekcijos ( LinkedList
, Queue
, Maps
, ir tt) Taip pat yra bendrinis Java.