¿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 mejor manera de manejar ese escenario donde "smart cast es imposible"
  • Vert.x Kotlin Type Mismatch requinetworking Controlador <AsyncResult <Unit >> found (Handler <AsyncResult <Unit >>) -> Unidad
  • Genéricos de Java / Kotlin
  • Sala: entidades relacionadas - constructor público utilizable
  • Cómo usar la expresión `with` de Kotlin para types anulables
  • Patrón de layout de puente que resulta en demasiados generics
  • error en la anotación de Kotlin?
  • El generador de secuencia como llamada de function de extensión falla con "falta de coincidencia de tipo de receptor"
  • Obtener un error relacionado con el certificate al download Kotlin en Android Studio
  • Subsorting de una class para cambiar la varianza de un parámetro de tipo en Kotlin
  • Llamar a kotlin funciones que son palabras key en java de java?