Генеричните класове улесняват повторното използване. Направете кода си мащабируем и ефективен, като използвате общи класове в Java.
Generics е концепция за програмиране, която ви позволява да посочите типа, който възнамерявате да съхранявате в колекция. Общият тип може да бъде всяка непримитивна стойност. Параметрите на традиционния тип, с които може да сте запознати, са низ и цяло число.
Можете обаче да създадете уникален общ тип. Освен това можете да създадете генеричен клас и да го използвате за създаване на различни колекции, използвайки генерични.
Създаване на общ тип
Общият тип е по същество обект, създаден с помощта на клас или интерфейс. Така че за тази статия генеричният тип ще бъде клиент. Използвайки примерно приложение на корпоративно ниво, клиентът представлява обект в система от бази данни. Тази система от бази данни обслужва мебелна компания, която има три физически местоположения в три различни града.
publicabstractclassCustomer{
private String name;
publicCustomer(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Ще забележите, абстрактно ключова дума в Клиент клас декларация по-горе. Това означава, че не можете да създадете директен тип или обект от Клиент Тип.
Като се има предвид, че всяко местоположение на физически магазин ще има уникален списък с клиенти, приложението ще трябва да има три подкласа на клиенти, които ще внедрите с концепцията за програмиране на наследяване.
Тези три подкласа ще бъдат твърдите типове към общия Клиент Тип. Първият Клиент подклас ще съдържа следния код:
publicclassCity1CustomerextendsCustomer{
publicCity1Customer(String name){
super(name);
}
}
Създаване на общ клас
За да използвате общ тип, ще трябва да имате общ клас или метод, който приема този тип като параметър. За да създадете общ клас, просто трябва да вмъкнете параметъра тип в декларацията на класа.
publicclassPromotion<T> {}
Кодът по-горе показва, че Промоция класът е общ. Това означава, че Промоция класът използва типове за създаване на своите обекти. Сега декларацията на класа може да приема колекция от обекти, които са низове, цели числа, клиенти и т.н. Мебелната компания обаче иска само Промоция клас за създаване на обекти с помощта на Клиент видове.
publicclassPromotion<TextendsCustomer> {}
Актуализираният код по-горе гарантира, че Промоция класът взема само Клиент типове, това означава всички подкласове на Клиент клас.
Като се има предвид, че има три магазина, компанията иска да създаде една независима промоция за всеки магазин. Данните, необходими за тези промоции, са подобни. Всяка промоция ще има име и колекция от клиенти, спечелили в тази промоция.
Има няколко начина да се подходи към този проблем. Можете да създадете a Промоция родителски клас и има три подкласа за всяко местоположение на магазина. Но тъй като всеки Промоция има подобна структура, в крайна сметка ще напишете дублиран код, което е неефективно (особено след като вече работите с Клиент подкласове).
Следователно, а Промоция генеричният клас е едно от по-ефективните решения на този проблем.
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 Промоция общият клас има една променлива (promoName). Този Java клас приема колекция от клиенти, спечелили промоцията (победители), и ги съхранява в Структура на данните ArrayList. За да добавите нов клиент към конкретна колекция от промоции, ще трябва да използвате addCustomer() метод. Ако в даден момент искате да знаете броя на клиентите, които са в колекция, можете да извикате numWinners() метод.
Създаване на колекции с помощта на общ клас
Преди да започнете да създавате колекции, ще трябва да създадете клиенти.
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 Основен клас по-горе създава четири клиентски обекта, всеки от които принадлежи към едно от трите местоположения на магазина. За да започнете да създавате колекции, ще трябва първо да създадете промоционални обекти (по един за всяко местоположение на магазин).
Promotion city1promo = new Promotion("City1 Promo");
Promotion city2promo = new Promotion("City2 Promo");
Promotion city3promo = new Promotion("City3 Promo");
Вмъквайки трите реда код по-горе в Основен клас ефективно ще създаде три специфични за типа (или специфично за местоположение) промоции. И така, само клиенти от магазина в първата градска локация (Град1Клиент) може да бъде победител в промоцията на този град (city1promo).
city1promo.addCustomer(john);
city1promo.addCustomer(kelly);
Следователно добавянето на горния код към Основен клас ще произведе следния резултат в конзолата:
Ако обаче се опитате да добавите трети клиент към списъка с победители в промоцията в първия град, вашето IDE ще доведе до грешка при компилация.
Това е така, защото нито едно от двете Джейн нито Джес е клиент на магазина в първи град. Създаването на общи типове и класове е полезно, тъй като предотвратява тези прости грешки да останат неуловени и да повредят базата данни на системата. В малко приложение може лесно да се забележат грешки като тази, но в система на корпоративно ниво грешки като тази може да останат неуловени.
city2promo.addCustomer(jane);
Замяната на грешния ред код с горния ще отпечата следния изход на конзолата:
Ползи от използването на генеричните типове
От примерното приложение в тази статия можете да видите, че основно предимство на използването на генерични типове е проверката на типа по време на компилация. Без проверка на типа добавянето на Джейн към който и да е от трите списъка за промоции няма да доведе до грешка във времето за изпълнение, тъй като Джейн наистина е клиент на мебелната компания.
Generics също улеснява няколко други предимства, включително повторно използване на кода и мащабируемост. Тъй като компанията се разширява в нови градове, можете лесно да създавате нови типове промоционални обекти, разчитайки до голяма степен на съществуващия код. Генеричните типове също ви позволяват да създавате ефективен код, който е основен приоритет в процеса на разработка на софтуер.