我可以访问Kotlin中内联函数调用的“封闭”对象吗?
想法:创建一个内联的便利函数来同步“内联”对象的内部锁的一个函数调用:
public inline fun 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 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() }
请记住,扩展函数不能影射成员函数,所以如果这个对象有另一个具有相同签名的函数,它将不会选择扩展函数。
就你而言,这似乎不太可能。