Az általános osztályok megkönnyítik az újrafelhasználást. Tegye méretezhetővé és hatékonnyá kódját a Java általános osztályaival.

A Generics egy programozási koncepció, amely lehetővé teszi a gyűjteményben tárolni kívánt típus megadását. Az általános típus bármilyen nem primitív érték lehet. A hagyományos típusparaméterek, amelyeket esetleg ismernek, a karakterlánc és az egész szám.

Létrehozhat azonban egyedi általános típust. Ezenkívül létrehozhat egy általános osztályt, és felhasználhatja azt különböző gyűjtemények létrehozására általánosok használatával.

Általános típus létrehozása

Az általános típus lényegében egy objektum, osztály segítségével készült vagy interfész. Tehát ennél a cikknél az általános típus ügyfél lesz. Egy vállalati szintű mintaalkalmazás használatával az ügyfél egy entitást képvisel egy adatbázisrendszerben. Ez az adatbázisrendszer egy bútoripari céget szolgál ki, amelynek három fizikai telephelye van három különböző városban.

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

Észre fogja venni a absztrakt kulcsszó a Vevő fenti osztálynyilatkozat. Ez azt jelenti, hogy nem hozhat létre közvetlen típust vagy objektumot a Vevő típus.

Tekintettel arra, hogy minden fizikai üzlethelyiségnek egyedi vevőlistája lesz, az alkalmazásnak három ügyfél-alosztályt kell tartalmaznia, amelyeket a az öröklődési programozási koncepció.

Ez a három alosztály lesz az általános szilárd típusa Vevő típus. Az első Vevő alosztály a következő kódot tartalmazza:

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

Általános osztály létrehozása

Általános típus használatához szükség van egy általános osztályra vagy metódusra, amely elfogadja ezt a típust paraméterként. Általános osztály létrehozásához egyszerűen be kell illesztenie a type paramétert az osztálydeklarációba.

publicclassPromotion<T> {}

A fenti kód azt jelzi, hogy a promóció osztály általános. Ez azt jelenti, hogy a promóció osztály típusokat használ az objektumok létrehozásához. Most az osztálydeklaráció olyan objektumok gyűjteményét veheti fel, amelyek karakterláncok, egész számok, ügyfelek stb. A bútorgyártó cég azonban csak a promóció osztályban objektumok létrehozásához a Vevő típusok.

publicclassPromotion<TextendsCustomer> {}

A fenti frissített kód biztosítja, hogy a promóció osztály csak a Vevő típusok, ez az összes alosztályt jelenti Vevő osztály.

Tekintettel arra, hogy három üzlet van, a cég minden üzlethez egy önálló promóciót kíván létrehozni. A promóciókhoz szükséges adatok hasonlóak. Minden promócióhoz tartozik egy név és azon ügyfelek gyűjteménye, akik nyertek az adott promócióban.

Számos módja van ennek a problémának a megközelítésére. Létrehozhatna a promóció szülő osztály, és minden üzlethelyhez három alosztálya van. De mivel mindegyik promóció hasonló felépítésű, akkor duplikált kódot fog írni, ami nem hatékony (főleg, hogy már dolgozik Vevő alosztályok).

Ezért a promóció Az általános osztály az egyik leghatékonyabb megoldás erre a problémára.

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();
}
}

A promóció Az általános osztálynak egyetlen változója van (promoName). Ez a Java osztály fogadja a promóciót megnyerő ügyfelek gyűjteményét (nyerteseket), és tárolja őket egy ArrayList adatstruktúra. Ha új ügyfelet szeretne hozzáadni egy adott promóciós gyűjteményhez, akkor a következőt kell használnia addCustomer() módszer. Ha bármikor tudni szeretné a gyűjteményben lévő ügyfelek számát, meghívhatja a nyertesek száma() módszer.

Gyűjtemények létrehozása általános osztály használatával

Mielőtt elkezdené a gyűjtemények létrehozását, létre kell hoznia ügyfeleket.

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");
}
}

A A fenti osztály négy vásárlói objektumot hoz létre, amelyek mindegyike a három üzlethely valamelyikéhez tartozik. A gyűjtemények létrehozásának megkezdéséhez először promóciós objektumokat kell létrehoznia (egyet minden üzlet helyéhez).

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

A fenti három kódsor beszúrása a osztály három típusspecifikus (vagy helyspecifikus) promóciót hoz létre. Tehát csak az első városi helyen lévő üzlet vásárlói (City1Customer) lehet az adott város promóciójának nyertese (city1promo).

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

Ezért a fenti kód hozzáadása a osztály a következő eredményt adja a konzolon:

Ha azonban megpróbál egy harmadik ügyfelet hozzáadni a promóciós nyertesek listájához az első városban, az IDE fordítási hibát produkál.

Ez azért van, mert egyik sem Jane sem Jess az első városban található üzlet vásárlója. Az általános típusok és osztályok létrehozása hasznos, mivel megakadályozza, hogy ezek az egyszerű hibák észrevétlenül maradjanak, és megsértsék a rendszer adatbázisát. Egy kis alkalmazásban könnyen észlelhetők az ehhez hasonló hibák, de egy vállalati szintű rendszerben előfordulhat, hogy az ilyen hibákat nem észlelik.

city2promo.addCustomer(jane);

A hibás kódsor lecserélése a fentire a következő kimenetet nyomtatja ki a konzolra:

Az általános típusok használatának előnyei

A cikkben található példaalkalmazásból láthatja, hogy az általános típusok használatának egyik fő előnye a fordítási idejű típusellenőrzés. Típusellenőrzés nélkül Jane hozzáadása a három promóciós lista bármelyikéhez nem okozna végrehajtási hibát, mivel Jane valóban a bútorgyártó cég ügyfele.

A Generics számos egyéb előnyt is elősegít, beleértve a kód újrafelhasználhatóságát és a méretezhetőséget. Ahogy a vállalat új városokra terjeszkedik, könnyen létrehozhat új promóciós objektumtípusokat, nagymértékben támaszkodva a meglévő kódra. Az általános típusok lehetővé teszik hatékony kód létrehozását is, ami a szoftverfejlesztési folyamat első számú prioritása.