Vispārējās klases atvieglo atkārtotu izmantošanu. Padariet savu kodu mērogojamu un efektīvu, izmantojot Java vispārīgās klases.

Generics ir programmēšanas koncepcija, kas ļauj norādīt veidu, ko plānojat saglabāt kolekcijā. Vispārīgs veids var būt jebkura neprimitīva vērtība. Tradicionālie tipa parametri, kas jums varētu būt pazīstami, ir virkne un vesels skaitlis.

Tomēr jūs varat izveidot unikālu vispārīgu veidu. Turklāt varat izveidot vispārīgu klasi un izmantot to, lai izveidotu dažādas kolekcijas, izmantojot sugas.

Vispārējā tipa izveide

Vispārējs tips būtībā ir objekts, izveidots, izmantojot klasi vai interfeisu. Tātad šim rakstam vispārīgais veids būs klients. Izmantojot uzņēmuma līmeņa lietojumprogrammas paraugu, klients pārstāv entītiju datu bāzes sistēmā. Šī datu bāzes sistēma apkalpo mēbeļu uzņēmumu, kam ir trīs fiziskās atrašanās vietas trīs dažādās pilsētās.

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

Jūs pamanīsit, abstrakts atslēgvārds Klients klases deklarācija iepriekš. Tas nozīmē, ka jūs nevarat izveidot tiešu tipu vai objektu no Klients veids.

Ņemot vērā, ka katrai fiziskajai veikala atrašanās vietai būs unikāls klientu saraksts, lietojumprogrammai būs jābūt trim klientu apakšklasēm, kuras ieviesīsiet, izmantojot mantojuma programmēšanas koncepcija.

Šīs trīs apakšklases būs vispārīgie veidi Klients veids. Pirmais Klients apakšklasē būs šāds kods:

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

Vispārējās klases izveide

Lai izmantotu vispārīgu veidu, jums ir jābūt vispārīgai klasei vai metodei, kas pieņem šo veidu kā parametru. Lai izveidotu vispārīgu klasi, klases deklarācijā vienkārši jāievieto tipa parametrs.

publicclassPromotion<T> {}

Iepriekš minētais kods norāda, ka Veicināšana klase ir vispārīga. Tas nozīmē, ka Veicināšana klase izmanto tipus, lai izveidotu savus objektus. Tagad klases deklarācija var ietvert objektu kolekciju, kas ir virknes, veseli skaitļi, klienti un tā tālāk. Tomēr mēbeļu uzņēmums vēlas tikai Veicināšana klasē, lai izveidotu objektus, izmantojot Klients veidi.

publicclassPromotion<TextendsCustomer> {}

Iepriekš minētais atjauninātais kods nodrošina, ka Veicināšana klase aizņem tikai Klients tipiem, tas nozīmē visas apakšklases Klients klasē.

Ņemot vērā, ka ir trīs veikali, uzņēmums vēlas izveidot vienu neatkarīgu akciju katram veikalam. Šīm akcijām nepieciešamie dati ir līdzīgi. Katrai akcijai būs vārds un to klientu kolekcija, kuri uzvarēja šajā akcijā.

Ir vairāki veidi, kā risināt šo problēmu. Jūs varētu izveidot a Veicināšana vecākā klase un katrai veikala atrašanās vietai ir trīs apakšklases. Bet tā kā katrs Veicināšana ir līdzīga struktūra, jūs galu galā ierakstīsit dublikātu kodu, kas ir neefektīvi (jo īpaši tāpēc, ka jūs jau strādājat ar Klients apakšklases).

Tāpēc a Veicināšana vispārīgā klase ir viens no efektīvākajiem šīs problēmas risinājumiem.

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 Veicināšana vispārīgajai klasei ir viens mainīgais (promoName). Šajā Java klasē tiek pieņemti klienti, kuri uzvarēja akcijā (uzvarētāji), un tie tiek glabāti vietnē ArrayList datu struktūra. Lai pievienotu jaunu klientu konkrētai reklāmu kolekcijai, jums ir jāizmanto addCustomer() metodi. Ja jebkurā brīdī vēlaties uzzināt kolekcijā esošo klientu skaitu, varat izsaukt Uzvarētāju skaits () metodi.

Kolekciju izveide, izmantojot vispārīgo klasi

Lai varētu sākt veidot kolekcijas, jums ir jāizveido klienti.

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 Galvenā klase augstāk izveido četrus klientu objektus, no kuriem katrs pieder vienai no trim veikalu vietām. Lai sāktu veidot kolekcijas, vispirms būs jāizveido reklāmas objekti (viens katrai veikala vietai).

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

Iepriekš minēto trīs koda rindiņu ievietošana Galvenā klase efektīvi izveidos trīs veidam (vai vietai specifiskas) akcijas. Tātad tikai klienti no veikala pirmajā pilsētas atrašanās vietā (City1Customer) var būt šīs pilsētas reklāmas uzvarētājs (city1promo).

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

Tāpēc, pievienojot iepriekš minēto kodu Galvenā klase konsolē radīs šādu rezultātu:

Tomēr, ja jūs mēģināt pievienot trešo klientu akcijas uzvarētāju sarakstam pirmajā pilsētā, jūsu IDE radīs apkopošanas kļūdu.

Tas ir tāpēc, ka ne viens, ne otrs Džeina nedz Džesa ir pircēja veikala pirmajā pilsētā. Vispārēju tipu un klašu izveide ir noderīga, jo tā novērš šo vienkāršo kļūdu novēršanu un sistēmas datu bāzes sabojāšanu. Mazā lietojumprogrammā šādas kļūdas var būt viegli pamanīt, bet uzņēmuma līmeņa sistēmā šādas kļūdas var nepamanīt.

city2promo.addCustomer(jane);

Aizstājot kļūdaino koda rindiņu ar iepriekš minēto, konsolē tiks izdrukāta šāda izvade:

Vispārējo veidu izmantošanas priekšrocības

No šī raksta lietojumprogrammas parauga varat redzēt, ka galvenā vispārīgo tipu izmantošanas priekšrocība ir kompilēšanas laika tipa pārbaude. Bez tipa pārbaudes Džeinas pievienošana kādam no trim veicināšanas sarakstiem neradītu izpildes laika kļūdu, jo Džeina patiešām ir mēbeļu uzņēmuma kliente.

Generics nodrošina arī vairākas citas priekšrocības, tostarp koda atkārtotu izmantošanu un mērogojamību. Uzņēmumam paplašinoties uz jaunām pilsētām, jūs varat viegli izveidot jaunus veicināšanas objektu tipus, lielā mērā paļaujoties uz esošo kodu. Vispārējie veidi arī ļauj izveidot efektīvu kodu, kas ir galvenā prioritāte programmatūras izstrādes procesā.