ジェネリクスについて
ジェネリクスを使用すると、異なるデータ型で動作する単一のメソッドやクラスを定義することが可能。
ジェネリクスの基本
型パラメータを使用して抽象的にクラスや関数を定義する方法。
コンパイル時に型の安全性を保ちつつ、様々な型で再利用可能なコンポーネントを作成することが可能。
// Tを型パラメータとして持つジェネリッククラスBoxを定義
class Box<T> {
// T型のオブジェクトを保持するfinal変数object。
// finalなので、この変数が初期化後に変更不可能
final T object;
// Boxクラスのコンストラクタ。
// このコンストラクタは引数としてT型のオブジェクトを受け取り、
// メンバ変数objectにそれを格納
Box(this.object);
}
void main() {
// Boxクラスのインスタンスを生成。
// ジェネリクスの型パラメータ<T>にintを指定して、
// 整数123をオブジェクトとしてBoxに格納する。
var box = Box<int>(123);
// Boxインスタンスのobjectメンバにアクセスし、その値をコンソールに出力する。
// 出力されるのは "123"
print(box.object); // 123
}
クラスや関数では通常 のように角括弧を使用して指定され、T は任意の型を表すプレースホルダーとして機能する。
Box(this.object);
この部分は以下と同義。
引数として受け取ったオブジェクトをクラスのフィールド object に直接割り当てる。
Box(T obj) : this.object = obj {
}
結論
Box(this.object); のようなコンストラクタの記法は、Dart において型の安全性を保ちつつ、コードの簡潔さを保つための効率的な方法であり、特にジェネリクスを使用して多様な型に対応するクラスを定義する場合に有効。