ジェネリクスを使用したクラスを作る

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


ジェネリクスを使用したクラスを作る

ジェネリクスを使用したクラスを利用するだけでなく、ジェネリクスを使用したクラスを自作することもできます。以下のプログラムでは、ジェネリクスを使用して 1個のインスタンスを格納できる Boxクラスを作成して、メインメソッドでそれを利用してみました。

なお、拡張 for文を使用しています。また、この Boxクラスはサンプルコードの意味合いが強く、実用性はあまりありません。

ソースコードは以下の通り。

V701/Box.java

/**
 * インスタンスを格納するクラスです。
 * @param <T> 型
 */
public class Box<T> {
	/**
	 * 格納するオブジェクト。
	 */
	private T object;
	
	/**
	 * コンストラクタ。
	 * @param object オブジェクト
	 */
	public Box(T object) {
		this.object = object;
	}
	
	/**
	 * 格納されたオブジェクトを返します。
	 * @return オブジェクト
	 */
	public T get() {
		return this.object;
	}
}

V701/V701.java

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;


/**
 * ジェネリクスを使用したクラスを作成し、利用します。
 */
public class V701 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		// String型インスタンスを格納する Box
		Box<String> stringBox = new Box<>("ABCDE");
		
		String string = stringBox.get();
		System.out.println(string);
		
		// Point型インスタンスを格納する Boxのリスト
		List<Box<Point>> pointBoxes = new ArrayList<>();
		
		pointBoxes.add(new Box<>(new Point(10, 20)));
		pointBoxes.add(new Box<>(new Point(50, 90)));
		pointBoxes.add(new Box<>(new Point(40, 30)));
		
		// 拡張 for文を使用するとよりスマートに記述できる
		for(int i = 0; i < pointBoxes.size(); i++) {
			Box<Point> pointBox = pointBoxes.get(i);
			Point point = pointBox.get();
			System.out.println(point);
		}
	}
}

実行結果の例は以下の通り。

ABCDE
java.awt.Point[x=10,y=20]
java.awt.Point[x=50,y=90]
java.awt.Point[x=40,y=30]

それぞれのBox型インスタンスに、String型インスタンスも Point型インスタンスも格納できていることが分かります。

最終更新: 2016/05/16 , 公開: 2013/08/14
▲top