¿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.

  • La variable 'ejecutable' debe ser inicializada
  • Generar SerialVersionUID para las classs de Kotlin en IntelliJ
  • Android Kotlin child onClick bloquea a los padres OnTouch
  • ¿Puedo usar Kotlin con Codename One?
  • Faltan numbers de línea en playstore crashdumps
  • Kotlin \ Java - Cómo get la sum de los elementos modificados de Array
  • Propiedad sin getter en Kotlin
  • Clase de datos de Kotlin con properties derivadas
  • Anomalías de cobertura de código Android (Kotlin)
  • Android evita que la Vista consum events
  • ¿Se debe evitar nombrar una function igual que una class existente en Kotlin? ¿Por qué?