Generics 如何使用ReadWriteProperty中的R泛型类型?

Generics 如何使用ReadWriteProperty中的R泛型类型?,generics,kotlin,Generics,Kotlin,如何使用R泛型类型?在我看到实现的ReadWriteProperty的任何地方,R被定义为Any或Any?,然后实现中使用typeR的两个部分(以下命名为thisRef)从未使用过 Kotlin的ReadWriteProperty定义如下(代码是从源文件复制/粘贴的): /** *可用于实现读写属性的属性委托的基本接口。 * *这只是为了方便而提供的;您不必扩展此接口 *只要属性委托具有具有相同签名的方法。 * *@param R拥有委托属性的对象类型。 *@param T属性值的类型。 */

如何使用
R
泛型类型?在我看到实现的
ReadWriteProperty
的任何地方,
R
被定义为
Any
Any?
,然后实现中使用type
R
的两个部分(以下命名为
thisRef
)从未使用过

Kotlin的
ReadWriteProperty
定义如下(代码是从源文件复制/粘贴的):

/**
*可用于实现读写属性的属性委托的基本接口。
*
*这只是为了方便而提供的;您不必扩展此接口
*只要属性委托具有具有相同签名的方法。
*
*@param R拥有委托属性的对象类型。
*@param T属性值的类型。
*/
公共接口读写属性{
/**
*返回给定对象的属性值。
*@param thisRef为其请求值的对象。
*@param property属性的元数据。
*@返回属性值。
*/
公共运算符fun getValue(thisRef:R,属性:KProperty):T
/**
*设置给定对象的属性值。
*@param thisRef为其请求值的对象。
*@param property属性的元数据。
*@param value要设置的值。
*/
公共运算符fun setValue(thisRef:R,属性:KProperty,值:T)
}

您可以创建针对特定类型接收器的委托属性。它只能在该类及其子类中使用,但您可以访问它的函数和属性

例如,您可以创建一个类,对使用委托的任何属性的调用进行计数:

open class Ticker {
    var ticks = 0
        private set

    class CountedAccess<T> (private val value: T) : ReadOnlyProperty<Ticker, T> {
        override fun getValue(thisRef: Ticker, property: KProperty<*>): T {
            thisRef.ticks++
            return value
        }
    }
}

您可以创建针对特定类型接收器的委托属性。它只能在该类及其子类中使用,但您可以访问它的函数和属性。@Tenfour04您能提供一个示例吗?多次重复这个答案,直到我最终找到一个使用它有意义的案例。谢谢:)
open class Ticker {
    var ticks = 0
        private set

    class CountedAccess<T> (private val value: T) : ReadOnlyProperty<Ticker, T> {
        override fun getValue(thisRef: Ticker, property: KProperty<*>): T {
            thisRef.ticks++
            return value
        }
    }
}
fun main() {
    class Something: Ticker() {
        val foos by CountedAccess(5)
        val bar by CountedAccess("Hello, world!")
    }

    val something = Something().apply {
        repeat(Random.nextInt(3)) {
            println("Number of foos is $foos")
            repeat(Random.nextInt(3)) {
                println("Bar says $bar")
            }
        }
    }
    println("Something's properties were accessed ${something.ticks} times.")
}