Groovy - Generika

Generika ermöglichen es, dass Typen (Klassen und Schnittstellen) Parameter sind, wenn Klassen, Schnittstellen und Methoden definiert werden. Ähnlich wie die bekannteren formalen Parameter, die in Methodendeklarationen verwendet werden, bieten Typparameter eine Möglichkeit, denselben Code mit unterschiedlichen Eingaben wiederzuverwenden. Der Unterschied besteht darin, dass die Eingaben für formale Parameter Werte sind, während die Eingaben für Typparameter Typen sind.

Generisches für Sammlungen

Die Sammlungsklassen wie die List-Klasse können so verallgemeinert werden, dass nur Sammlungen dieses Typs in der Anwendung akzeptiert werden. Ein Beispiel für die verallgemeinerte ArrayList ist unten dargestellt. Die folgende Anweisung akzeptiert nur Listenelemente vom Typ string -

List<String> list = new ArrayList<String>();

Im folgenden Codebeispiel machen wir Folgendes:

  • Erstellen einer generalisierten ArrayList-Auflistung, die nur Strings enthält.
  • Fügen Sie der Liste 3 Zeichenfolgen hinzu.
  • Drucken Sie für jedes Element in der Liste den Wert der Zeichenfolgen.
class Example {
   static void main(String[] args) {
      // Creating a generic List collection
      List<String> list = new ArrayList<String>();
      list.add("First String");
      list.add("Second String");
      list.add("Third String");
		
      for(String str : list) {
         println(str);
      }
   } 
}

Die Ausgabe des obigen Programms wäre -

First String 
Second String 
Third String

Verallgemeinerte Klassen

Die gesamte Klasse kann auch verallgemeinert werden. Dies macht die Klasse flexibler darin, Typen zu akzeptieren und entsprechend mit diesen Typen zu arbeiten. Schauen wir uns ein Beispiel an, wie wir dies erreichen können.

Im folgenden Programm führen wir die folgenden Schritte aus:

  • Wir erstellen eine Klasse namens ListType. Beachten Sie die Schlüsselwörter <T> vor der Klassendefinition. Dies teilt dem Compiler mit, dass diese Klasse jeden Typ akzeptieren kann. Wenn wir also ein Objekt dieser Klasse deklarieren, können wir während der Deklaration einen Typ angeben, der im Platzhalter <T> ersetzt wird

  • Die generische Klasse verfügt über einfache Getter- und Setter-Methoden, um mit der in der Klasse definierten Mitgliedsvariablen zu arbeiten.

  • Beachten Sie im Hauptprogramm, dass wir Objekte der ListType-Klasse deklarieren können, jedoch unterschiedlichen Typs. Der erste ist vom Typ Integer und der zweite vom Typ String.

class Example {
   static void main(String[] args) {
      // Creating a generic List collection 
      ListType<String> lststr = new ListType<>();
      lststr.set("First String");
      println(lststr.get()); 
		
      ListType<Integer> lstint = new ListType<>();
      lstint.set(1);
      println(lstint.get());
   }
} 

public class ListType<T> {
   private T localt;
	
   public T get() {
      return this.localt;
   }
	
   public void set(T plocal) {
      this.localt = plocal;
   } 
}

Die Ausgabe des obigen Programms wäre -

First String 
1