Groovy - 泛型



泛型允許在定義類、介面和方法時將型別(類和介面)作為引數。這與在方法宣告中使用的更熟悉的形式引數非常相似,型別引數提供了一種方法,可以使用不同的輸入來重用相同的程式碼。區別在於形式引數的輸入是值,而型別引數的輸入是型別。

集合的泛型

集合類(例如 List 類)可以泛化,以便應用程式只接受該型別的集合。下面顯示了泛化 ArrayList 的示例。以下語句的作用是:它只接受字串型別的列表項:

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

在下面的程式碼示例中,我們正在執行以下操作:

  • 建立一個泛化的 ArrayList 集合,它只儲存字串。
  • 向列表中新增 3 個字串。
  • 對於列表中的每個專案,列印字串的值。
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);
      }
   } 
}

上述程式的輸出將是:

First String 
Second String 
Third String

泛型類

整個類也可以泛化。這使得類在接受任何型別和根據這些型別進行相應工作方面更加靈活。讓我們來看一個如何實現這一點的例子。

在下面的程式中,我們執行以下步驟:

  • 我們建立了一個名為 ListType 的類。請注意類定義前面放置的 <T> 關鍵字。這告訴編譯器此類可以接受任何型別。因此,當我們宣告此類的物件時,我們可以在宣告期間指定一個型別,該型別將替換佔位符 <T>

  • 泛型類具有簡單的 getter 和 setter 方法,用於處理在類中定義的成員變數。

  • 在主程式中,請注意我們可以宣告 ListType 類的物件,但型別不同。第一個是 Integer 型別,第二個是 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;
   } 
}

上述程式的輸出將是:

First String 
1
廣告