Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

class WeakRef<T> where T <: Object

public class WeakRef<T> <: WeakRefBase where T <: Object {
    public init(value: T, cleanupPolicy: CleanupPolicy)
}

功能:此类提供弱引用相关的功能,如果一个对象的引用被标记为弱引用,那么即使引用不为空并且该对象的可达性成立, GC 也可以按照指定的回收策略回收它。

父类型:

prop cleanupPolicy

public prop cleanupPolicy: CleanupPolicy

功能:获取该弱引用的清理策略。

类型:CleanupPolicy

示例:

import std.ref.{WeakRef, CleanupPolicy}

class Data {
    public var number: Int64

    init(n: Int64) {
        number = n
    }
}

main(): Int64 {
    // 创建一个Data对象
    let data = Data(123)

    // 为Data对象创建弱引用,并指定清理策略
    let weakRef = WeakRef<Data>(data, CleanupPolicy.EAGER)

    // 获取弱引用的清理策略
    let policy = weakRef.cleanupPolicy
    println("已获取弱引用的清理策略")

    return 0
}

运行结果:

已获取弱引用的清理策略

prop value

public prop value: Option<T>

功能:读取弱引用指向的对象。如果弱引用为空或弱引用中的对象已被清理则返回 None

类型:Option<T>

示例:

import std.ref.{WeakRef, CleanupPolicy}
import std.core.Option

class Data {
    public var number: Int64

    init(n: Int64) {
        number = n
    }
}

main(): Int64 {
    // 创建一个Data对象
    let data = Data(123)

    // 为Data对象创建弱引用
    let weakRef = WeakRef<Data>(data, CleanupPolicy.EAGER)

    // 获取弱引用指向的对象
    let value = weakRef.value
    match (value) {
        case Some(x) => println("弱引用指向的对象值: ${x.number}")
        case None => println("弱引用为空")
    }

    return 0
}

运行结果:

弱引用指向的对象值: 123

init(T, CleanupPolicy)

public init(value: T, cleanupPolicy: CleanupPolicy)

功能:为 value 对象创建弱引用,并指定清理策略。

参数:

  • value: T - 弱引用指向的对象。
  • cleanupPolicy: CleanupPolicy - value 对象的清理策略。

示例:

import std.ref.{WeakRef, CleanupPolicy}

class Data {
    public var number: Int64

    init(n: Int64) {
        number = n
    }
}

main(): Int64 {
    // 创建一个Data对象
    let data = Data(123)

    // 为Data对象创建弱引用,并指定清理策略
    let weakRef = WeakRef<Data>(data, CleanupPolicy.EAGER)

    println("已创建弱引用")

    return 0
}

运行结果:

已创建弱引用

func clear()

public func clear(): Unit

功能:强制清理弱引用指向的对象,后续对 value 的访问将返回 None

示例:

import std.ref.{WeakRef, CleanupPolicy}

class Data {
    public var number: Int64

    init(n: Int64) {
        number = n
    }
}

main(): Int64 {
    // 创建一个Data对象
    let data = Data(123)

    // 为Data对象创建弱引用
    let weakRef = WeakRef<Data>(data, CleanupPolicy.EAGER)

    // 获取弱引用指向的对象
    let value = weakRef.value
    match (value) {
        case Some(x) => println("清除前,弱引用指向的对象值: ${x.number}")
        case None => println("清除前,弱引用为空")
    }

    // 强制清理弱引用指向的对象
    weakRef.clear()

    // 再次获取弱引用指向的对象
    let valueAfter = weakRef.value
    match (valueAfter) {
        case Some(x) => println("清除后,弱引用指向的对象值: ${x.number}")
        case None => println("清除后,弱引用为空")
    }

    return 0
}

运行结果:

清除前,弱引用指向的对象值: 123
清除后,弱引用为空

class WeakRefBase

sealed abstract class WeakRefBase

功能:此类不包含任何公开成员和公开函数,也不允许被继承、扩展,仅作为 WeakRef 的基类。