Dart: Self タイプの実現方法
June 9, 2024
現在 Dart には Self 型を表すようなキーワードはありません。キーワードはないものの、Self 型を実現することはでき、具体的には次のように書けば実現可能です。若干奇妙な書き方です。
class MyData<T extends MyData<T>> {}
以下の Issue でも触れられています。
- Self type · Issue #3025 · dart-lang/language | GitHub
- https://github.com/dart-lang/language/issues/3025
具体的なサンプルコードは以下をご覧ください。
@immutable
abstract class MyData<T extends MyData<T>> {
T copyWith();
bool equals(T other);
@override
operator ==(Object other) =>
identical(this, other) ||
other is T && runtimeType == other.runtimeType && equals(other);
@override
int get hashCode => runtimeType.hashCode;
}
@immutable
class MyPersonData extends MyData<MyPersonData> {
MyPersonData(
this.name,
this.age,
);
final String name;
final int age;
@override
MyPersonData copyWith({
String? name,
int? age,
}) =>
MyPersonData(
name ?? this.name,
age ?? this.age,
);
@override
bool equals(MyPersonData other) => name == other.name && age == other.age;
}