Skip to content

Java互換性

CoilのAPIはKotlinファーストで設計されています。Kotlinのインラインラムダ、レシーバーパラメータ、デフォルト引数、拡張関数といったJavaでは利用できない言語機能を活用しています。

重要な点として、サスペンド関数はJavaでは実装できません。これは、カスタムのTransformationsSize ResolversFetchers、およびDecodersがKotlinでのみ実装可能であることを意味します。

これらの制限があるにもかかわらず、CoilのAPIのほとんどはJavaと互換性があります。シングルトンImageLoaderは次のようにして取得できます。

java
ImageLoader imageLoader = SingletonImageLoader.get(context);

ImageRequestをエンキューする構文は、JavaとKotlinでほとんど同じです。

java
ImageRequest request = new ImageRequest.Builder(context)
    .data("https://example.com/image.jpg")
    .crossfade(true)
    .target(new ImageViewTarget(imageView))
    .build();
imageLoader.enqueue(request);

::: Note ImageView.loadはJavaからは使用できません。代わりにImageRequest.Builder APIを使用してください。

::: suspend関数はJavaから簡単に呼び出すことはできません。したがって、画像を同期的に取得するには、Javaから次のように呼び出せるImageLoader.executeBlocking拡張関数を使用する必要があります。

java
ImageRequest request = new ImageRequest.Builder(context)
    .data("https://example.com/image.jpg")
    .size(1080, 1920)
    .build();
Drawable drawable = ImageLoaders.executeBlocking(imageLoader, request).getImage().asDrawable(context.resources);

::: Note ImageLoaders.executeBlockingは、サスペンドする代わりに現在のスレッドをブロックします。これをメインスレッドから呼び出さないでください。 :::