■ジェネリクス
あるクラスの値をint型で作成し、同じ実装ではあるが、double型でクラスを作成したいとき、ジェネリクスを使用することで、わざわざint型のクラスとdouble型のクラスと書き分ける必要はない。
・ジェネリクスの定義方法
// ジェネリクスの定義
class クラス名<型指定>{
クラスの処理を実装
}
// 呼び出し方
public class Sample {
public static void main(String[] args) {
クラス名<型指定> インスタンス名 = new クラス名<型指定>();
}
}
■実装するプログラムの概要
▼xとyの値とデータ型を出力するクラス
・フィールド宣言(メンバ変数)
x
y
・xとyの値とデータ型を表示するメソッド
xの値とデータ型を出力
yの値とデータ型を出力
・コンストラクタ
x
y
▼メインクラス
クラスをインスタンス(Integerクラス)し、xとyの値とデータ型を表示する。
クラスをインスタンス(Doubleクラス)し、xとyの値とデータ型を表示する。
※補足事項
ジェネリクスのデータ型には、int型やdouble型を指定することはできず、クラス型を指定しなければならない。
そのため、int型を指定するためには、Integerクラスを指定し、double型を指定する場合は、Doubleクラスを指定する。
この「int型」→「Integerクラス」をボクシングと呼び、「Integerクラス」のことを総じてラッパークラスと呼ぶ。
■サンプルコード
// xとyの値とデータ型を出力するクラス
class num<Type> {
// フィールド宣言(メンバ変数)
private Type x;
private Type y;
// xとyの値とデータ型を表示
public void show_num() {
System.out.println("x = " + x);
System.out.println("xのデータ型: " + x.getClass().getSimpleName());
System.out.println("y = " + y);
System.out.println("yのデータ型: " + y.getClass().getSimpleName());
}
// コンストラクタ
public num(Type x, Type y) {
this.x = x;
this.y = y;
}
}
public class Sample {
// メイン処理
public static void main(String[] args) {
// クラスをインスタンス(Integerクラス)
num<Integer> cal1 = new num<Integer>(1, 2);
// xとyの値とデータ型を表示
cal1.show_num();
// クラスをインスタンス(Doubleクラス)
num<Double> cal2 = new num<Double>(1.23, 4.56);
// xとyの値とデータ型を表示
cal2.show_num();
}
}
■実行結果
x = 1
xのデータ型: Integer
y = 2
yのデータ型: Integer
x = 1.23
xのデータ型: Double
y = 4.56
yのデータ型: Double
コメント