Generické triedy uľahčujú opätovné použitie. Urobte svoj kód škálovateľným a efektívnym pomocou generických tried v jazyku Java.
Generics je koncept programovania, ktorý vám umožňuje určiť typ, ktorý chcete uložiť do kolekcie. Generickým typom môže byť akákoľvek neprimitívna hodnota. Tradičné parametre typu, ktoré možno poznáte, sú reťazec a celé číslo.
Môžete však vytvoriť jedinečný generický typ. Okrem toho môžete vytvoriť generickú triedu a použiť ju na vytváranie rôznych kolekcií pomocou generík.
Vytvorenie všeobecného typu
Generický typ je v podstate objekt, vytvorené pomocou triedy alebo rozhranie. Takže pre tento článok bude všeobecným typom zákazník. Pomocou vzorovej aplikácie na podnikovej úrovni zákazník predstavuje entitu v databázovom systéme. Tento databázový systém poskytuje služby nábytkárskej spoločnosti, ktorá má tri fyzické pobočky v troch rôznych mestách.
publicabstractclassCustomer{
private String name;
publicCustomer(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Všimnete si abstraktné kľúčové slovo v Zákazník vyhlásenie o triede vyššie. Znamená to, že nemôžete vytvoriť priamy typ alebo objekt z Zákazník typu.
Vzhľadom na to, že každá fyzická predajňa bude mať jedinečný zoznam zákazníkov, aplikácia bude musieť mať tri podtriedy zákazníkov, ktoré implementujete pomocou koncepcia programovania dedičnosti.
Tieto tri podtriedy budú pevnými typmi pre generické Zákazník typu. Prvý Zákazník podtrieda bude obsahovať nasledujúci kód:
publicclassCity1CustomerextendsCustomer{
publicCity1Customer(String name){
super(name);
}
}
Vytvorenie generickej triedy
Ak chcete použiť generický typ, musíte mať generickú triedu alebo metódu, ktorá akceptuje tento typ ako parameter. Ak chcete vytvoriť generickú triedu, musíte jednoducho vložiť parameter type do deklarácie triedy.
publicclassPromotion<T> {}
Vyššie uvedený kód znamená, že Propagácia trieda je všeobecná. To znamená, že Propagácia trieda používa typy na vytváranie svojich objektov. Teraz môže deklarácia triedy obsahovať kolekciu objektov, ktorými sú reťazce, celé čísla, zákazníci atď. Nábytkárska spoločnosť však chce len tzv Propagácia triedy na vytváranie objektov pomocou Zákazník typy.
publicclassPromotion<TextendsCustomer> {}
Vyššie uvedený aktualizovaný kód zaisťuje, že Propagácia trieda berie len Zákazník typy, to znamená všetky podtriedy Zákazník trieda.
Vzhľadom na to, že ide o tri predajne, chce spoločnosť pre každú predajňu vytvoriť jednu samostatnú akciu. Údaje potrebné pre tieto akcie sú podobné. Každá akcia bude mať názov a zoznam zákazníkov, ktorí v danej akcii vyhrali.
Existuje niekoľko spôsobov, ako sa k tomuto problému postaviť. Môžete vytvoriť a Propagácia nadradená trieda a majú tri podtriedy pre každé miesto obchodu. Ale keďže každý Propagácia má podobnú štruktúru, skončíte pri písaní duplicitného kódu, čo je neefektívne (najmä preto, že už pracujete s Zákazník podtriedy).
Preto a Propagácia generická trieda je jedným z najefektívnejších riešení tohto problému.
import java.util.ArrayList;
publicclassPromotion<TextendsCustomer> {
private String promoName;
private ArrayListwinners = 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 Propagácia generická trieda má jednu premennú (promoName). Táto trieda Java prijíma kolekciu zákazníkov, ktorí vyhrali promo akciu (víťazov) a ukladá ich do súboru Štruktúra údajov ArrayList. Ak chcete pridať nového zákazníka do špecifickej kolekcie propagačných akcií, musíte použiť addCustomer() metóda. Ak chcete kedykoľvek zistiť počet zákazníkov, ktorí sú v kolekcii, môžete vyvolať numWinners() metóda.
Vytváranie kolekcií pomocou generickej triedy
Skôr ako začnete vytvárať kolekcie, musíte vytvoriť zákazníkov.
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 Hlavná triedy vyššie vytvára štyri objekty zákazníkov, z ktorých každý patrí do jednej z troch predajní. Ak chcete začať vytvárať kolekcie, musíte najskôr vytvoriť propagačné predmety (jeden pre každú predajňu).
Promotion city1promo = new Promotion("City1 Promo");
Promotion city2promo = new Promotion("City2 Promo");
Promotion city3promo = new Promotion("City3 Promo");
Vloženie troch riadkov kódu vyššie do Hlavná triedy efektívne vytvorí tri propagácie špecifické pre daný typ (alebo pre lokalitu). Takže iba zákazníci z obchodu v prvom meste (Mesto1 Zákazník) môže byť víťazom propagácie tohto mesta (city1promo).
city1promo.addCustomer(john);
city1promo.addCustomer(kelly);
Preto pridanie vyššie uvedeného kódu do Hlavná trieda vytvorí v konzole nasledujúci výsledok:
Ak sa však pokúsite pridať tretieho zákazníka do zoznamu víťazov propagačnej akcie v prvom meste, vaše IDE spôsobí chybu pri kompilácii.
Je to preto, lebo ani jedno Jane ani Jess je zákazníkom predajne v prvom meste. Vytváranie generických typov a tried je užitočné, pretože zabraňuje tomu, aby tieto jednoduché chyby zostali nezachytené a poškodili databázu systému. V malých aplikáciách môže byť ľahké rozpoznať chyby, ako je táto, ale v systéme na podnikovej úrovni môžu zostať chyby, ako je táto.
city2promo.addCustomer(jane);
Nahradením chybného riadku kódu vyššie uvedeným vytlačíte na konzolu nasledujúci výstup:
Výhody používania generických typov
Zo vzorovej aplikácie v tomto článku môžete vidieť, že hlavnou výhodou používania generických typov je kontrola typu počas kompilácie. Bez kontroly typu by pridanie Jane do ktoréhokoľvek z troch zoznamov propagačných akcií nespôsobilo chybu v čase vykonania, pretože Jane je skutočne zákazníčkou nábytkárskej spoločnosti.
Generics tiež umožňuje niekoľko ďalších výhod vrátane opätovnej použiteľnosti kódu a škálovateľnosti. Keď sa spoločnosť rozšíri do nových miest, môžete ľahko vytvárať nové typy propagačných objektov, pričom sa vo veľkej miere spoliehate na existujúci kód. Generické typy vám tiež umožňujú vytvárať efektívny kód, ktorý je najvyššou prioritou v procese vývoja softvéru.