¿Puedo acceder al object "adjunto" para una llamada de function en línea en Kotlin?

Idea: realice una function de conveniencia en línea para sincronizar una llamada a function en el locking intrínseco del object "interior":

public inline fun <T> intrinsicSync(block: () -> T): T { return synchronized(intrinsicLockOfTheObjectUsingTheFunction) { block() } } fun someFunction(parameter: SomeClass) { intrinsicSync(shanetworkingResource.operation(parameter)) } 

es posible? Si no, ¿hay una manera diferente pero igualmente conveniente? Concedo que

 fun someFunction(parameter: SomeClass) { synchronized(this) { shanetworkingResource.operation(parameter) } } 

no es la mayor molestia en el mundo, pero aún me gustaría saber si es posible hacer algo similar a lo que imaginé.

Lo máximo que puede hacer es darle a la function un receptor (es decir, convertirla en una function de extensión):

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

y luego en una function miembro , puedes hacer

 this.intrinsicSync { shanetworkingResource.operation() } 

y como this se infiere, deberías poder acortar esto para

 intrinsicSync { shanetworkingResource.operation() } 

Tenga en count que las funciones de extensión no pueden sombrear las funciones miembro, por lo que si este object tiene otra function con la misma firma, no elegirá la function de extensión.

En su caso, sin embargo, esto parece poco probable.

  • Comstack el código de kotlin tanto para JVM como para JavaScript
  • ¿Por qué todavía es necesario lanzar el tipo aunque ya se haya asegurado en este ejemplo?
  • ¿Debo usar la class de datos incluso si implemento todo hashCode (), equals () y toString ()?
  • Robolectric addResolveInfoForIntent no funciona
  • Gradle no puede resolver el complemento de Kotlin Gradle 1.1.1 - InvalidAlgorithmParameterException
  • Kotlin construye causando JVM a la falla de segmentación
  • La aplicación Kotlin cli no funciona después de actualizar a kotlin 1.0.0-beta
  • comstackdo kt files están compuestos por bytecodes?
  • El tipo esperado no acepta nulos en Java, pero el valor puede ser nulo en Kotlin
  • ¿Cómo hacer clic en el evento oyente en Kotlin / JavaScript?
  • Kotlin loop con pasos irregulares