Android Kotlin代表内存使用

Android Kotlin代表内存使用,android,kotlin,Android,Kotlin,在设计android聊天应用程序时,使用Kotlin委托创建了几个类。这些类经常在类之间使用和传递;所以,我想问一下,在一个这样的例子中,拥有这样的类结构的内存使用情况 使用Kotlin委托的具体类ImageMessage: open class ImageMessage( image: AppImage, val timestamp: Long ) : AppImage by image 这是ImageMessage中使用的AppImage接口: interface AppI

在设计android聊天应用程序时,使用Kotlin委托创建了几个类。这些类经常在类之间使用和传递;所以,我想问一下,在一个这样的例子中,拥有这样的类结构的内存使用情况

使用Kotlin委托的具体类ImageMessage:

open class ImageMessage(
    image: AppImage,
    val timestamp: Long
) : AppImage by image
这是ImageMessage中使用的AppImage接口:

interface AppImage {
    var firebaseStorageUrl: String
    val image: Bitmap
}
在聊天应用程序中,存在2个集合:一个是实现AppImage的匿名对象列表,另一个是借助匿名类创建的ImageMessages列表

有点像这样:

val image = object : AppImage{...}
imagesList.add(image)
val imageMessage = ImageMessage(image, System.currentTimeInMillis())
imageMessageList.add(imageMessage)

问题:此实现是否会导致存储2个位图图像,或者有一个位图对象链接两次?看到新的语法让我在回答问题时犹豫不决;所以,我请求你的帮助

在将其解压缩到Java时,请看一看。首先,ImageMessage实现AppImage并重写方法
getFirebaseStorageUrl
getImage
返回值取决于
AppImage
。所以这意味着只会创建一个位图实例并通过图像实例

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();
   }
}
firebaseStorageUrl和image由AppImage实现

open class ImageMessage(
    abc: AppImage,
    val timestamp: Long
) : AppImage by abc
这类ImageMessage通过委托实现AppImage,但本质上,与上面显式实现AppImage的ImageMessage相同


备注:我只是更改了委托的名称以帮助您理解。

在我看来,它们是相同的对象,只有方法被重写并传输到委托的对象。但完全不确定
open class ImageMessage(
    abc: AppImage,
    val timestamp: Long
) : AppImage by abc