
# 型変換

型変換は、ある型の値を別の型に変えます。主に、設定ファイルのテキストを Bean が必要とする型に変換します。

## 使う理由

設定はテキストです。`server.port=8080`、`timeout=10s`、`max-upload=10MB`。一方 Bean は `int`、`Duration`、`DataSize`、enum、リストを必要とします。変換サービスは `@Value`、`Environment.getPropertyAs<T>`、`@ConfigurationProperties` のバインドでこの変換を行うため、自分で呼ぶことはほとんどありません。

変換を直接扱うのは 2 つの場合です。独自の型をフレームワークに教えるとき(`conversionService` Bean)と、自分のコードで値を変換するときです。

## 例

```properties
# lib/resources/application.properties
shop.timeout=30s
shop.max-upload=10MB
shop.ports=8080,8081
```

```dart
import 'package:spring_core_dart/spring_core_dart.dart';

@Service()
class Uploads {
  Uploads(
    @Value(r'${shop.timeout}') this.timeout, // Duration(seconds: 30)
    @Value(r'${shop.max-upload}') this.maxUpload, // 10485760 バイト
    @Value(r'${shop.ports}') this.ports, // [8080, 8081]
  );

  final Duration timeout;
  final DataSize maxUpload;
  final List<int> ports;
}
```

## ページ一覧

- [ConversionService](conversion-service.md): 変換サービス、デフォルトのコンバーター、独自コンバーターの追加方法。
- [DataSize](data-size.md): `10MB` のようなサイズ。単位は 1024 の累乗。
- [Durations](durations.md): `10s` と `PT10S`、`DurationStyle` と `ChronoUnit`。

## 関連項目

- [@Value](../config/value.md)
- [Environment](../config/environment.md)
- [@ConfigurationProperties](../config/configuration-properties.md)
