Groovy-generics

提供:Dev Guides
移動先:案内検索

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クラスのオブジェクトを宣言できますが、型は異なります。 最初のタイプは整数型で、2番目のタイプは文字列型です。
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