Android kotlin构造函数参数缺失?;
我为Glide编写了一个MaskShapeTransformation,所以我想在转换中传递一个可绘制的,并用原始位图绘制这个可绘制的,以产生遮罩效果 在开始时,我传递了一个像这样的绘图,并带有一个软引用,以避免出现memoryleakAndroid kotlin构造函数参数缺失?;,android,kotlin,constructor,android-glide,Android,Kotlin,Constructor,Android Glide,我为Glide编写了一个MaskShapeTransformation,所以我想在转换中传递一个可绘制的,并用原始位图绘制这个可绘制的,以产生遮罩效果 在开始时,我传递了一个像这样的绘图,并带有一个软引用,以避免出现memoryleak class MaskShapeTransformation(drawable: Drawable): BitmapTransformation() { private val weakDrawable = SoftReference(drawabl
class MaskShapeTransformation(drawable: Drawable): BitmapTransformation() {
private val weakDrawable = SoftReference(drawable)
.....
}
但是当我使用weakDrawable.get()?
获取可绘制时,可绘制的为空
我不知道为什么,但我尝试了一切,直到我改变了我的构造函数,我只是像这样添加val
到修改过的drawable中
class MaskShapeTransformation(val drawable: Drawable): BitmapTransformation() {
private val weakDrawable = SoftReference(drawable)
.....
}
发生了一些惊人的事情,weakDrawable.get()?
工作得很好!
我很困惑,有人能告诉我为什么吗?第一点:
WeakReference
大概只会保留一个引用,只要其他东西也能保持引用
第二点:Kotlin构造函数语法意味着它们非常不同:
MaskShapeTransformation(可绘制:可绘制)
MaskShapeTransformation(val可绘制:可绘制)
Drawable
传递给构造函数。第二个也这么说,但也在类上创建一个字段,并使用传递的值初始化它。这意味着第二种形式为您提供了一个具有两个字段的对象:
:保存传入的drawabledrawable
:弱引用包装weakDrawable
drawable
把它们放在一起,现在你有了一个类,它有一个对Drawable的强引用,这意味着弱引用也将保持活动状态。第一点:
WeakReference
将大致保持一个引用,只要其他引用也保持活动状态
第二点:Kotlin构造函数语法意味着它们非常不同:
MaskShapeTransformation(可绘制:可绘制)
MaskShapeTransformation(val可绘制:可绘制)
Drawable
传递给构造函数。第二个也这么说,但也在类上创建一个字段,并使用传递的值初始化它。这意味着第二种形式为您提供了一个具有两个字段的对象:
:保存传入的drawabledrawable
:弱引用包装weakDrawable
drawable