Generični razredi olajšajo ponovno uporabo. Naj bo vaša koda razširljiva in učinkovita z uporabo generičnih razredov v Javi.

Generika je koncept programiranja, ki vam omogoča, da določite vrsto, ki jo nameravate shraniti v zbirko. Generični tip je lahko katera koli neprimitivna vrednost. Tradicionalna parametra tipa, ki ju morda poznate, sta niz in celo število.

Vendar pa lahko ustvarite edinstveno generično vrsto. Poleg tega lahko ustvarite generični razred in ga uporabite za ustvarjanje različnih zbirk z generiki.

Ustvarjanje generičnega tipa

Generični tip je v bistvu objekt, ustvarjen z uporabo razreda ali vmesnik. Torej bo za ta članek generični tip stranka. Z uporabo vzorčne aplikacije na ravni podjetja stranka predstavlja entiteto v sistemu baze podatkov. Ta sistem baze podatkov nudi storitve pohištvenemu podjetju, ki ima tri fizične lokacije v treh različnih mestih.

publicabstractclassCustomer{
private String name;
publicCustomer(String name){
this.name = name;
}
public String getName(){
return name;
}
}
instagram viewer

Opazili boste, povzetek ključna beseda v Stranka deklaracija razreda zgoraj. To pomeni, da ne morete ustvariti neposrednega tipa ali predmeta iz Stranka vrsta.

Glede na to, da bo imela vsaka lokacija fizične trgovine edinstven seznam strank, bo aplikacija morala imeti tri podrazrede strank, ki jih boste implementirali z koncept programiranja dedovanja.

Ti trije podrazredi bodo trdni tipi za generične Stranka vrsta. Prvi Stranka podrazred bo vseboval naslednjo kodo:

publicclassCity1CustomerextendsCustomer{
publicCity1Customer(String name){
super(name);
}
}

Ustvarjanje generičnega razreda

Če želite uporabiti generični tip, boste morali imeti generični razred ali metodo, ki sprejme to vrsto kot parameter. Če želite ustvariti generični razred, morate preprosto vstaviti parameter tipa v deklaracijo razreda.

publicclassPromotion<T> {}

Zgornja koda nakazuje, da je Napredovanje razred je splošen. To pomeni, da je Napredovanje razred uporablja tipe za ustvarjanje svojih objektov. Zdaj lahko deklaracija razreda sprejme zbirko objektov, ki so nizi, cela števila, stranke itd. Vendar pa pohištveno podjetje želi samo Napredovanje razred za ustvarjanje predmetov z uporabo Stranka vrste.

publicclassPromotion<TextendsCustomer> {}

Zgornja posodobljena koda zagotavlja, da Napredovanje razred sprejme le Stranka vrste, to pomeni vse podrazrede Stranka razred.

Glede na to, da gre za tri trgovine, želi podjetje ustvariti eno samostojno promocijo za vsako trgovino. Podatki, potrebni za te promocije, so podobni. Vsaka promocija bo imela ime in zbirko strank, ki so zmagale v tej promociji.

Obstaja več načinov za pristop k tej težavi. Lahko ustvarite a Napredovanje nadrejeni razred in ima tri podrazrede za vsako trgovinsko lokacijo. Ampak saj vsak Napredovanje ima podobno strukturo, boste na koncu napisali podvojeno kodo, kar je neučinkovito (še posebej, ker že delate z Stranka podrazredi).

Zato je a Napredovanje generični razred je ena izmed učinkovitejših rešitev tega problema.

import java.util.ArrayList;

publicclassPromotion<TextendsCustomer> {

private String promoName;
private ArrayList winners = new ArrayList<>();

publicPromotion(String promoName){
this.promoName = promoName;
}

public String getPromoName(){
return promoName;
}

publicvoidaddCustomer(T customer){
if (winners.contains(customer)) {
System.out.println( customer.getName() + " is already a winner of this prize.");
} else {
winners.add(customer);
System.out.println( customer.getName() + " is a winner in the " + this.promoName);
}
}

publicintnumWinners(){
returnthis.winners.size();
}
}

The Napredovanje generični razred ima eno spremenljivko (promoName). Ta razred Java sprejme zbirko strank, ki so osvojile promocijo (zmagovalci), in jih shrani v Podatkovna struktura ArrayList. Če želite dodati novo stranko v določeno promocijsko zbirko, bi morali uporabiti addCustomer() metoda. Če želite kadar koli izvedeti število strank v zbirki, lahko pokličete numWinners() metoda.

Ustvarjanje zbirk z uporabo generičnega razreda

Preden začnete ustvarjati zbirke, morate ustvariti stranke.

publicclassMain{
publicstaticvoidmain(String[] args){
City1Customer john = new City1Customer("John Brown");
City1Customer kelly = new City1Customer("Kelly James");
City2Customer jane = new City2Customer("Jane Doe");
City3Customer jess = new City3Customer("Jess Smith");
}
}

The Glavni razred zgoraj ustvari štiri objekte strank, od katerih vsak pripada eni od treh lokacij trgovine. Če želite začeti ustvarjati zbirke, boste morali najprej ustvariti promocijske objekte (enega za vsako lokacijo trgovine).

Promotion city1promo = new Promotion("City1 Promo");
Promotion city2promo = new Promotion("City2 Promo");
Promotion city3promo = new Promotion("City3 Promo");

Vstavljanje treh zgornjih vrstic kode v Glavni bo učinkovito ustvaril tri promocije, specifične za vrsto (ali lokacijo). Torej samo kupci iz trgovine na prvi mestni lokaciji (City1Customer) je lahko zmagovalec v promociji tega mesta (city1promo).

city1promo.addCustomer(john);
city1promo.addCustomer(kelly);

Zato dodajanje zgornje kode v Glavni razred bo v konzoli ustvaril naslednji rezultat:

Če pa poskusite dodati tretjo stranko na seznam zmagovalcev promocije v prvem mestu, bi vaš IDE povzročil napako pri prevajanju.

To je zato, ker niti Jane niti Jess je kupec trgovine v prvem mestu. Ustvarjanje generičnih tipov in razredov je koristno, saj preprečuje, da bi te preproste napake ostale neulovljene in poškodovale sistemsko bazo podatkov. V majhni aplikaciji je lahko preprosto opaziti takšne napake, v sistemu na ravni podjetja pa lahko takšne napake ostanejo neulovljene.

city2promo.addCustomer(jane);

Zamenjava napačne vrstice kode z zgornjo bo na konzolo natisnila naslednji izhod:

Prednosti uporabe generičnih vrst

Iz vzorčne aplikacije v tem članku lahko vidite, da je glavna prednost uporabe generičnih tipov preverjanje tipov med prevajanjem. Brez preverjanja tipa dodajanje Jane na katerega koli od treh promocijskih seznamov ne bi povzročilo napake v času izvajanja, saj je Jane dejansko stranka pohištvenega podjetja.

Generics omogoča tudi več drugih prednosti, vključno s ponovno uporabnostjo in razširljivostjo kode. Ko se podjetje širi v nova mesta, lahko enostavno ustvarite nove vrste promocijskih objektov, pri čemer se močno zanašate na obstoječo kodo. Generični tipi vam omogočajo tudi ustvarjanje učinkovite kode, ki je glavna prednostna naloga v procesu razvoja programske opreme.