Klasy ogólne ułatwiają ponowne użycie. Spraw, aby Twój kod był skalowalny i wydajny, używając ogólnych klas w Javie.

Generics to koncepcja programistyczna, która pozwala określić typ, który zamierzasz przechowywać w kolekcji. Typ ogólny może być dowolną wartością inną niż prymitywna. Tradycyjne parametry typu, które być może znasz, to string i integer.

Można jednak utworzyć unikalny typ ogólny. Ponadto możesz utworzyć klasę generyczną i używać jej do tworzenia różnych kolekcji przy użyciu generycznych.

Tworzenie typu ogólnego

Typ ogólny jest zasadniczo obiektem, utworzone przy użyciu klasy lub interfejs. Tak więc w tym artykule typem ogólnym będzie klient. Korzystając z przykładowej aplikacji na poziomie przedsiębiorstwa, klient reprezentuje jednostkę w systemie bazy danych. Ten system baz danych obsługuje firmę meblarską, która ma trzy fizyczne lokalizacje w trzech różnych miastach.

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

zauważysz abstrakcyjny słowo kluczowe w Klient Deklaracja klasy powyżej. Oznacza to, że nie można utworzyć bezpośredniego typu ani obiektu z pliku Klient typ.

Biorąc pod uwagę, że każda lokalizacja sklepu fizycznego będzie miała unikalną listę klientów, aplikacja będzie musiała mieć trzy podklasy klientów, które zaimplementujesz za pomocą koncepcja programowania z dziedziczeniem.

Te trzy podklasy będą stałymi typami dla typów ogólnych Klient typ. Pierwszy Klient podklasa będzie zawierała następujący kod:

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

Tworzenie klasy ogólnej

Aby użyć typu ogólnego, musisz mieć ogólną klasę lub metodę, która akceptuje ten typ jako parametr. Aby utworzyć klasę ogólną, wystarczy wstawić parametr typu do deklaracji klasy.

publicclassPromotion<T> {}

Powyższy kod wskazuje, że Awans klasa jest ogólna. Oznacza to, że Awans klasa używa typów do tworzenia swoich obiektów. Teraz deklaracja klasy może przyjmować kolekcję obiektów, które są ciągami znaków, liczbami całkowitymi, klientami i tak dalej. Jednak firma meblarska chce tylko Awans klasa do tworzenia obiektów za pomocą Klient typy.

publicclassPromotion<TextendsCustomer> {}

Powyższy zaktualizowany kod zapewnia, że Awans klasa zajmuje tylko Klient typy, oznacza to wszystkie podklasy Klient klasa.

Biorąc pod uwagę, że są trzy sklepy, firma chce stworzyć jedną niezależną promocję dla każdego sklepu. Dane wymagane do tych promocji są podobne. Każda promocja będzie miała nazwę i kolekcję klientów, którzy wygrali w tej promocji.

Istnieje kilka sposobów podejścia do tego problemu. Mógłbyś stworzyć Awans klasę nadrzędną i mieć trzy podklasy dla każdej lokalizacji sklepu. Ale od każdego Awans ma podobną strukturę, skończysz na pisaniu zduplikowanego kodu, co jest nieefektywne (zwłaszcza, że ​​już pracujesz z Klient podklasy).

Dlatego Awans Klasa generyczna jest jednym z bardziej wydajnych rozwiązań tego problemu.

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 Awans klasa ogólna ma pojedynczą zmienną (nazwa promocyjna). Ta klasa Java akceptuje kolekcję klientów, którzy wygrali promocję (zwycięzców) i przechowuje ich w pliku Struktura danych ArrayList. Aby dodać nowego klienta do określonej kolekcji promocji, musisz użyć metody dodajKlienta() metoda. Jeśli w dowolnym momencie chcesz poznać liczbę klientów znajdujących się w kolekcji, możesz wywołać metodę liczbaZwycięzców() metoda.

Tworzenie kolekcji przy użyciu klasy ogólnej

Zanim zaczniesz tworzyć kolekcje, musisz utworzyć klientów.

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 Główny klasa powyżej tworzy cztery obiekty klientów, z których każdy należy do jednej z trzech lokalizacji sklepu. Aby rozpocząć tworzenie kolekcji, musisz najpierw utworzyć obiekty promocyjne (po jednym dla każdej lokalizacji sklepu).

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

Wstawienie trzech linii kodu powyżej do pliku Główny class skutecznie utworzy trzy promocje specyficzne dla typu (lub lokalizacji). Tak więc tylko klienci ze sklepu w pierwszej lokalizacji miasta (Miasto1Klient) może zostać zwycięzcą promocji tego miasta (city1promo).

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

Dlatego dodanie powyższego kodu do pliku Główny class wygeneruje następujący wynik w konsoli:

Jeśli jednak spróbujesz dodać trzeciego klienta do listy zwycięzców promocji w pierwszym mieście, Twoje IDE wyświetli błąd kompilacji.

To dlatego, że ani Jane ani Pęto jest klientem sklepu w pierwszym mieście. Tworzenie ogólnych typów i klas jest przydatne, ponieważ zapobiega przechwyceniu tych prostych błędów i uszkodzeniu bazy danych systemu. W małej aplikacji wykrycie takich błędów może być łatwe, ale w systemie na poziomie przedsiębiorstwa takie błędy mogą pozostać niezauważone.

city2promo.addCustomer(jane);

Zastąpienie błędnej linii kodu powyższą spowoduje wydrukowanie następującego wyniku w konsoli:

Korzyści z używania typów ogólnych

Z przykładowej aplikacji w tym artykule widać, że główną zaletą korzystania z typów ogólnych jest sprawdzanie typów w czasie kompilacji. Bez sprawdzenia typu dodanie Jane do którejkolwiek z trzech list awansów nie spowodowałoby błędu czasu wykonania, ponieważ Jane rzeczywiście jest klientem firmy meblarskiej.

Generics zapewnia również kilka innych korzyści, w tym możliwość ponownego wykorzystania kodu i skalowalność. W miarę rozszerzania się firmy na nowe miasta można łatwo tworzyć nowe typy obiektów promocji, opierając się w dużej mierze na istniejącym kodzie. Typy generyczne pozwalają również na tworzenie wydajnego kodu, który jest priorytetem w procesie wytwarzania oprogramowania.