kotlin中使用软引用

一、Java方式实现

var str = String("asdf")
val strSoftRef = SoftReference<String>(str)
str = 

二、kotlin委托实现

委托属性,虽然常用by lazy,没看到别人的文章还想没想到这东西。
看lazy大致可以了解委托的实现方式,结合一些文章差不多可以写成这样

fun <T> weak(initializer: () -> T) = Weak(initializer.invoke())

class Weak<T>(r: T) {
    
    
    private var reference: WeakReference<T?> = WeakReference(r)

    operator fun getValue(thisRef: Any?, property: KProperty<*>): T? = reference.get()

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) {
    
    
        this.reference = WeakReference(value)
    }
}

可通过委托来实现

var str by weak {
    
     "str" }

软引用可以采用同样的写法。但是对于虚引用来说,虚引用一般配合引用队列一起使用,委托只能处理单一属性,所以就不用委托了。

猜你喜欢

转载自blog.csdn.net/weixin_42600398/article/details/123864606