Общие классы облегчают повторное использование. Сделайте свой код масштабируемым и эффективным, используя универсальные классы в Java.

Обобщения — это концепция программирования, которая позволяет вам указать тип, который вы собираетесь хранить в коллекции. Универсальный тип может быть любым не примитивным значением. Традиционные параметры типа, с которыми вы, возможно, знакомы, — это строка и целое число.

Однако вы можете создать уникальный универсальный тип. Кроме того, вы можете создать универсальный класс и использовать его для создания различных коллекций с использованием универсальных элементов.

Создание универсального типа

Общий тип по сути является объектом, созданный с помощью класса или интерфейс. Итак, для этой статьи универсальным типом будет клиент. Используя пример приложения уровня предприятия, клиент представляет объект в системе базы данных. Эта система баз данных обслуживает мебельную компанию, имеющую три офиса в трех разных городах.

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

Вы заметите абстрактный ключевое слово в Клиент объявление класса выше. Это означает, что вы не можете создать прямой тип или объект из Клиент тип.

Учитывая, что каждое местоположение физического магазина будет иметь уникальный список клиентов, приложение должно иметь три подкласса клиентов, которые вы реализуете с помощью концепция программирования наследования.

Эти три подкласса будут твердыми типами для общего Клиент тип. Первый Клиент подкласс будет содержать следующий код:

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

Создание универсального класса

Чтобы использовать универсальный тип, вам потребуется универсальный класс или метод, который принимает этот тип в качестве параметра. Чтобы создать универсальный класс, вам просто нужно вставить параметр типа в объявление класса.

publicclassPromotion<T> {}

Приведенный выше код указывает, что Повышение класс общий. Это означает, что Повышение класс использует типы для создания своих объектов. Теперь объявление класса может принимать набор объектов, которые являются строками, целыми числами, клиентами и т. д. Однако мебельная компания хочет только Повышение класс для создания объектов с помощью Клиент типы.

publicclassPromotion<TextendsCustomer> {}

Обновленный код выше гарантирует, что Повышение класс принимает только Клиент типы, это означает, что все подклассы Клиент сорт.

Учитывая, что магазинов три, компания хочет создать по одной независимой акции для каждого магазина. Данные, необходимые для этих рекламных акций, аналогичны. Каждая акция будет иметь имя и набор клиентов, выигравших в этой акции.

Есть несколько подходов к этой проблеме. Вы можете создать Повышение родительский класс и иметь три подкласса для каждого местоположения магазина. Но так как каждый Повышение имеет аналогичную структуру, вы в конечном итоге будете писать повторяющийся код, что неэффективно (тем более, что вы уже работаете с Клиент подклассы).

Следовательно, Повышение универсальный класс является одним из наиболее эффективных решений этой проблемы.

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

Повышение универсальный класс имеет одну переменную (promoName). Этот класс Java принимает набор клиентов, выигравших акцию (победителей), и сохраняет их в Структура данных ArrayList. Чтобы добавить нового клиента в конкретную рекламную коллекцию, вам нужно будет использовать добавитьКлиент() метод. Если в какой-то момент вы хотите узнать количество клиентов в коллекции, вы можете вызвать функцию количество победителей() метод.

Создание коллекций с использованием универсального класса

Прежде чем вы сможете начать создавать коллекции, вам нужно создать клиентов.

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

Основной класс выше создает четыре объекта покупателя, каждый из которых принадлежит одному из трех магазинов. Чтобы начать создавать коллекции, вам нужно сначала создать рекламные объекты (по одному для каждого магазина).

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

Вставив три строки кода выше в Основной класс эффективно создаст три промо-акции для конкретного типа (или для конкретного местоположения). Итак, только покупатели из магазина в первой городской локации (City1Клиент) может стать победителем акции этого города (город1промо).

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

Поэтому, добавив приведенный выше код в Основной class выведет в консоли следующий результат:

Однако, если вы попытаетесь добавить третьего клиента в список победителей акции в первом городе, ваша IDE выдаст ошибку компиляции.

Это потому, что ни Джейн ни Джесс является покупателем магазина в первом городе. Создание универсальных типов и классов полезно, так как это препятствует тому, чтобы эти простые ошибки оставались незамеченными и повреждали базу данных системы. В небольшом приложении такие ошибки легко обнаружить, но в системе корпоративного уровня такие ошибки могут остаться незамеченными.

city2promo.addCustomer(jane);

Замена ошибочной строки кода приведенной выше приведет к выводу в консоль следующего вывода:

Преимущества использования универсальных типов

Из примера приложения в этой статье видно, что основным преимуществом использования универсальных типов является проверка типов во время компиляции. Без проверки типов добавление Джейн в любой из трех списков продвижения не приведет к ошибке времени выполнения, поскольку Джейн действительно является клиентом мебельной компании.

Обобщения также обеспечивают несколько других преимуществ, включая повторное использование кода и масштабируемость. По мере того, как компания расширяется в новые города, вы можете легко создавать новые типы рекламных объектов, в значительной степени полагаясь на существующий код. Универсальные типы также позволяют создавать эффективный код, что является главным приоритетом в процессе разработки программного обеспечения.