Skip to content
Dart

ジェネリクス

型安全な再利用可能なクラスとメソッド。

#generic#type-safe

Code

dart
class Stack<T> {
  final List<T> _items = [];

  void push(T item) => _items.add(item);
  T pop() => _items.removeLast();
  bool get isEmpty => _items.isEmpty;
}

// Generic method
T firstOrDefault<T>(List<T> list, T defaultValue) {
  return list.isEmpty ? defaultValue : list.first;
}

// Bounded generics
class Repository<T extends Entity> {
  final List<T> items = [];
  void add(T item) => items.add(item);
  T findById(int id) => items.firstWhere((i) => i.id == id);
}

abstract class Entity {
  int get id;
}

// Generic typedef
typedef Mapper<T, R> = R Function(T);

// Usage
void main() {
  var stack = Stack<int>();
  stack.push(1);
  stack.push(2);
  print(stack.pop());  // 2

  var names = ['Alice', 'Bob'];
  print(firstOrDefault(names, 'Unknown'));
}