Посмотрите, когда его разложили на Java. Во-первых, ImageMessage реализует AppImage и метод переопределения getFirebaseStorageUrl
и getImage
возвращаемое значение зависит от AppImage image
. Таким образом, это означает, что будет создан только один экземпляр Bitmap, который пройдет через экземпляр изображения.
public class ImageMessage implements AppImage {
private final long timestamp;
// $FF: synthetic field
private final AppImage $$delegate_0;
public final long getTimestamp() {
return this.timestamp;
}
public ImageMessage(@NotNull AppImage image, long timestamp) {
Intrinsics.checkParameterIsNotNull(image, "image");
super();
this.$$delegate_0 = image;
this.timestamp = timestamp;
}
@NotNull
public String getFirebaseStorageUrl() {
return this.$$delegate_0.getFirebaseStorageUrl();
}
public void setFirebaseStorageUrl(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.$$delegate_0.setFirebaseStorageUrl(var1);
}
@NotNull
public Bitmap getImage() {
return this.$$delegate_0.getImage();
}
}
Простой способ понять - объявить ImageMessage следующим образом:
open class ImageMessage(override var firebaseStorageUrl: String, override val image: Bitmap, val timestamp: Long) : AppImage
firebaseStorageUrl и image являются реализовано AppImage.
open class ImageMessage(
abc: AppImage,
val timestamp: Long
) : AppImage by abc
Этот класс ImageMessage реализует AppImage посредством делегатов, но, по сути, это тот же самый ImageMessage, который явно реализует AppImage, как указано выше.
Ps: I просто измените имя делегата, чтобы вам было легче понять.