我可以访问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() } 

请记住,扩展函数不能影射成员函数,所以如果这个对象有另一个具有相同签名的函数,它将不会选择扩展函数。

就你而言,这似乎不太可能。