Bendrosios klasės palengvina pakartotinį naudojimą. Padarykite savo kodą keičiamo dydžio ir efektyvų naudodami bendrąsias Java klases.

Generics yra programavimo koncepcija, leidžianti nurodyti tipą, kurį ketinate saugoti kolekcijoje. Bendrasis tipas gali būti bet kokia neprimityvi reikšmė. Įprasti tipo parametrai, kuriuos galbūt žinote, yra eilutė ir sveikasis skaičius.

Tačiau galite sukurti unikalų bendrąjį tipą. Be to, galite sukurti bendrąją klasę ir naudoti ją kurdami skirtingas kolekcijas naudodami bendruosius žodžius.

Bendrojo tipo kūrimas

Bendrasis tipas iš esmės yra objektas, sukurta naudojant klasę arba sąsaja. Taigi, šiame straipsnyje bendras tipas bus klientas. Naudodamas pavyzdinę įmonės lygio programą, klientas atstovauja subjektui duomenų bazių sistemoje. Ši duomenų bazių sistema aptarnauja baldų įmonę, kuri turi tris fizines vietas trijuose skirtinguose miestuose.

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

Jūs pastebėsite, abstrakčiai raktinis žodis Klientas klasės deklaracija aukščiau. Tai reiškia, kad negalite sukurti tiesioginio tipo ar objekto iš Klientas tipo.

Atsižvelgiant į tai, kad kiekviena fizinė parduotuvės vieta turės unikalų klientų sąrašą, programa turės turėti tris klientų poklasius, kuriuos įdiegsite naudodami paveldėjimo programavimo koncepcija.

Šie trys poklasiai bus kietieji bendrųjų tipų tipai Klientas tipo. Pirmas Klientas poklasyje bus toks kodas:

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

Bendrosios klasės kūrimas

Norėdami naudoti bendrąjį tipą, turėsite turėti bendrąją klasę arba metodą, kuris priimtų šį tipą kaip parametrą. Norėdami sukurti bendrąją klasę, į klasės deklaraciją tiesiog reikia įterpti tipo parametrą.

publicclassPromotion<T> {}

Aukščiau pateiktas kodas rodo, kad Skatinimas klasė yra bendrinė. Tai reiškia, kad Skatinimas klasė naudoja tipus savo objektams kurti. Dabar klasės deklaracija gali apimti objektų, kurie yra eilutės, sveikieji skaičiai, klientai ir pan., rinkinį. Tačiau baldų įmonė nori tik Skatinimas klasę, kad sukurtumėte objektus naudodami Klientas tipai.

publicclassPromotion<TextendsCustomer> {}

Aukščiau pateiktas atnaujintas kodas užtikrina, kad Skatinimas klasė užima tik Klientas tipai, tai reiškia visus poklasius Klientas klasė.

Atsižvelgdama į tai, kad yra trys parduotuvės, įmonė nori sukurti po vieną nepriklausomą reklamą kiekvienai parduotuvei. Šioms akcijoms reikalingi duomenys yra panašūs. Kiekviena reklama turės pavadinimą ir klientų, kurie laimėjo tą reklamą, rinkinį.

Yra keletas būdų, kaip išspręsti šią problemą. Galite sukurti a Skatinimas pirminė klasė ir turėti tris poklasius kiekvienai parduotuvės vietai. Bet kadangi kiekvienas Skatinimas turi panašią struktūrą, galiausiai rašysite pasikartojantį kodą, o tai neefektyvu (ypač todėl, kad jau dirbate su Klientas poklasiai).

Todėl a Skatinimas bendroji klasė yra vienas iš efektyvesnių šios problemos sprendimų.

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 Skatinimas bendroji klasė turi vieną kintamąjį (promoName). Ši „Java“ klasė priima akciją laimėjusių klientų kolekciją (laimėtojus) ir saugo juos ArrayList duomenų struktūra. Norėdami pridėti naują klientą prie konkrečios reklamos kolekcijos, turėsite naudoti addCustomer() metodas. Jei bet kuriuo metu norite sužinoti kolekcijoje esančių klientų skaičių, galite iškviesti Nugalėtojų skaičius () metodas.

Kolekcijų kūrimas naudojant bendrąją klasę

Prieš pradėdami kurti kolekcijas, turėsite sukurti klientų.

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 Pagrindinis aukščiau esanti klasė sukuria keturis klientų objektus, kurių kiekvienas priklauso vienai iš trijų parduotuvių vietų. Norėdami pradėti kurti kolekcijas, pirmiausia turėsite sukurti reklamos objektus (po vieną kiekvienai parduotuvės vietai).

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

Trijų kodo eilučių įterpimas aukščiau į Pagrindinis klasėje efektyviai sukurs tris konkrečiam tipui (arba vietai) būdingas reklamas. Taigi, tik klientai iš parduotuvės pirmoje miesto vietoje (City1Customer) gali būti to miesto reklamos laimėtojas (city1 akcija).

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

Todėl pridedant aukščiau pateiktą kodą prie Pagrindinis klasė konsolėje pateiks tokį rezultatą:

Tačiau jei bandysite įtraukti trečią klientą į reklamos laimėtojų sąrašą pirmame mieste, jūsų IDE sukels kompiliavimo klaidą.

Taip yra todėl, kad nei vienas Džeinė nei Jess yra pirmajame mieste esančios parduotuvės klientas. Bendrųjų tipų ir klasių kūrimas yra naudingas, nes neleidžia šioms paprastoms klaidoms nepastebėti ir sugadinti sistemos duomenų bazę. Mažoje programoje gali būti nesunku pastebėti tokias klaidas, kaip ši, tačiau įmonės lygio sistemoje tokios klaidos gali likti nepastebėtos.

city2promo.addCustomer(jane);

Pakeitus klaidingą kodo eilutę į aukščiau esančią, konsolėje bus išspausdinta tokia išvestis:

Bendrųjų tipų naudojimo pranašumai

Iš šiame straipsnyje pateiktos programos pavyzdžio matote, kad pagrindinis bendrųjų tipų naudojimo pranašumas yra kompiliavimo laiko tipo tikrinimas. Be tipo patikros, įtraukus Jane į bet kurį iš trijų reklamos sąrašų, vykdymo laiko klaida nesukeltų, nes Jane iš tikrųjų yra baldų įmonės klientė.

Generics taip pat palengvina keletą kitų privalumų, įskaitant kodo pakartotinį naudojimą ir mastelio keitimą. Įmonei plečiantis į naujus miestus, galite lengvai kurti naujus reklaminių objektų tipus, labai pasikliaudami esamu kodu. Bendrieji tipai taip pat leidžia sukurti efektyvų kodą, kuris yra svarbiausias programinės įrangos kūrimo proceso prioritetas.