Generische Klassen erleichtern die Wiederverwendbarkeit. Machen Sie Ihren Code mithilfe generischer Klassen in Java skalierbar und effizient.

Generics ist ein Programmierkonzept, mit dem Sie den Typ angeben können, den Sie in einer Sammlung speichern möchten. Ein generischer Typ kann jeder nicht-primitive Wert sein. Die traditionellen Typparameter, mit denen Sie vielleicht vertraut sind, sind String und Integer.

Sie können jedoch einen eindeutigen generischen Typ erstellen. Darüber hinaus können Sie eine generische Klasse erstellen und diese verwenden, um mithilfe von Generika verschiedene Sammlungen zu erstellen.

Erstellen eines generischen Typs

Ein generischer Typ ist im Wesentlichen ein Objekt. erstellt mit einer Klasse oder eine Schnittstelle. Für diesen Artikel ist der generische Typ also ein Kunde. Mithilfe einer Beispielanwendung auf Unternehmensebene stellt der Kunde eine Entität in einem Datenbanksystem dar. Dieses Datenbanksystem bedient ein Möbelunternehmen mit drei physischen Standorten in drei verschiedenen Städten.

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

Sie werden es bemerken abstrakt Schlüsselwort in der Kunde Klassendeklaration oben. Das bedeutet, dass Sie keinen direkten Typ oder kein direktes Objekt daraus erstellen können Kunde Typ.

Da jeder physische Ladenstandort über eine eindeutige Kundenliste verfügt, muss die Anwendung über drei Kundenunterklassen verfügen, die Sie mit implementieren das Konzept der Vererbungsprogrammierung.

Diese drei Unterklassen sind die Volumentypen des Generikums Kunde Typ. Der erste Kunde Die Unterklasse enthält den folgenden Code:

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

Erstellen einer generischen Klasse

Um einen generischen Typ zu verwenden, benötigen Sie eine generische Klasse oder Methode, die diesen Typ als Parameter akzeptiert. Um eine generische Klasse zu erstellen, müssen Sie lediglich den Typparameter in die Klassendeklaration einfügen.

publicclassPromotion<T> {}

Der obige Code zeigt an, dass die Förderung Klasse ist generisch. Dies bedeutet, dass die Förderung Die Klasse verwendet Typen, um ihre Objekte zu erstellen. Jetzt kann die Klassendeklaration eine Sammlung von Objekten annehmen, bei denen es sich um Zeichenfolgen, Ganzzahlen, Kunden usw. handelt. Allerdings will der Möbelkonzern nur das Förderung Klasse zum Erstellen von Objekten mit der Kunde Typen.

publicclassPromotion<TextendsCustomer> {}

Der oben aktualisierte Code stellt sicher, dass die Förderung Klasse dauert nur die Kunde Typen, also alle Unterklassen der Kunde Klasse.

Da es drei Filialen gibt, möchte das Unternehmen für jede Filiale eine eigene Werbeaktion erstellen. Die für diese Werbeaktionen erforderlichen Daten sind ähnlich. Jede Aktion hat einen Namen und eine Sammlung von Kunden, die bei dieser Aktion gewonnen haben.

Es gibt mehrere Möglichkeiten, dieses Problem anzugehen. Sie könnten eine erstellen Förderung übergeordnete Klasse und drei Unterklassen für jeden Filialstandort. Aber da jeder Förderung eine ähnliche Struktur aufweist, schreiben Sie am Ende doppelten Code, was ineffizient ist (vor allem, da Sie bereits damit arbeiten). Kunde Unterklassen).

Daher a Förderung Die generische Klasse ist eine der effizienteren Lösungen für dieses Problem.

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

Der Förderung generische Klasse hat eine einzelne Variable (PromoName). Diese Java-Klasse akzeptiert eine Sammlung von Kunden, die die Werbeaktion gewonnen haben (Gewinner), und speichert sie in einer ArrayList-Datenstruktur. Um einen neuen Kunden zu einer bestimmten Aktionskollektion hinzuzufügen, müssen Sie die verwenden addCustomer() Methode. Wenn Sie zu irgendeinem Zeitpunkt wissen möchten, wie viele Kunden sich in einer Sammlung befinden, können Sie Folgendes aufrufen: numWinners() Methode.

Erstellen von Sammlungen mithilfe einer generischen Klasse

Bevor Sie mit dem Erstellen von Sammlungen beginnen können, müssen Sie Kunden erstellen.

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

Der Hauptsächlich Die obige Klasse erstellt vier Kundenobjekte, die jeweils zu einem der drei Filialstandorte gehören. Um mit der Erstellung von Kollektionen zu beginnen, müssen Sie zunächst Werbeobjekte erstellen (eines für jeden Filialstandort).

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

Einfügen der drei Codezeilen oben in die Hauptsächlich Die Klasse erstellt effektiv drei typspezifische (oder standortspezifische) Werbeaktionen. Es werden also nur Kunden aus der Filiale im ersten Stadtstandort (Stadt1Kunde) kann ein Gewinner bei der Werbung dieser Stadt sein (city1promo).

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

Daher wird der obige Code hinzugefügt Hauptsächlich Die Klasse erzeugt in der Konsole das folgende Ergebnis:

Wenn Sie jedoch versuchen, einen dritten Kunden zur Liste der Aktionsgewinner in der ersten Stadt hinzuzufügen, erzeugt Ihre IDE einen Kompilierungsfehler.

Das liegt daran, dass weder das eine noch das andere Jane noch Jess ist Kunde des Ladens in der ersten Stadt. Das Erstellen generischer Typen und Klassen ist nützlich, da es verhindert, dass diese einfachen Fehler unbemerkt bleiben und die Datenbank eines Systems beschädigen. In einer kleinen Anwendung kann es leicht sein, Fehler wie diesen zu erkennen, in einem System auf Unternehmensebene können solche Fehler jedoch möglicherweise nicht erkannt werden.

city2promo.addCustomer(jane);

Wenn Sie die fehlerhafte Codezeile durch die obige ersetzen, wird die folgende Ausgabe auf der Konsole ausgegeben:

Vorteile der Verwendung der generischen Typen

Anhand der Beispielanwendung in diesem Artikel können Sie erkennen, dass ein großer Vorteil der Verwendung generischer Typen die Typprüfung zur Kompilierungszeit ist. Ohne Typprüfung würde das Hinzufügen von Jane zu einer der drei Werbelisten keinen Ausführungszeitfehler verursachen, da Jane tatsächlich eine Kundin des Möbelunternehmens ist.

Generics bietet außerdem mehrere weitere Vorteile, darunter die Wiederverwendbarkeit und Skalierbarkeit des Codes. Wenn das Unternehmen in neue Städte expandiert, können Sie problemlos neue Werbeobjekttypen erstellen und dabei stark auf den vorhandenen Code zurückgreifen. Mit generischen Typen können Sie außerdem effizienten Code erstellen, was im Softwareentwicklungsprozess oberste Priorität hat.