gpt4 book ai didi

kotlin - 我可以在Kotlin中访问 “enclosing”对象以进行内联函数调用吗?

转载 作者:行者123 更新时间:2023-12-02 13:23:36 26 4
gpt4 key购买 nike

想法:制作一个内联便捷函数,以同步“内联”对象的固有锁上的函数调用:

public inline fun <T> intrinsicSync(block: () -> T): T {
return synchronized(intrinsicLockOfTheObjectUsingTheFunction) {
block()
}
}

fun someFunction(parameter: SomeClass) {
intrinsicSync(sharedResource.operation(parameter))
}

这可能吗?如果没有,是否有其他不同但同样方便的方法?我承认
fun someFunction(parameter: SomeClass) {
synchronized(this) {
sharedResource.operation(parameter)
}
}

并不是世界上最大的麻烦,但我仍然想知道是否有可能做与我想象的事情类似的事情。

最佳答案

您最多可以做的就是给该函数一个接收器(即使其成为扩展函数):

public inline fun <T> Any.intrinsicSync(crossinline block: () -> T): T {
// ^ within this function, `this` refers to the receiver
return synchronized(this, block)
}

然后在成员函数中,您可以执行
this.intrinsicSync { sharedResource.operation() }

并且由于 this被推断出来,您应该可以将其缩短为
intrinsicSync { sharedResource.operation() }

请记住,扩展功能不能遮盖成员功能,因此,如果此对象具有另一个具有相同签名的功能,则不会选择扩展功能。

但是,就您而言,这似乎不太可能。

关于kotlin - 我可以在Kotlin中访问 “enclosing”对象以进行内联函数调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com