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

  • ¿Por qué hay NoClassDefFoundError con una class que existe?
  • Error: ejecución fallida para la tarea ': app: javaPreCompileDebug'. > java.io.IOException: no se pudo eliminar annotationProcessors.json
  • Kotlin: ¿Cómo puedo permitir que Android Studio implemente la function de la interfaz en la parte inferior de la class
  • falla en la construcción de Travis ci - causa: espacio PermGen
  • ¿Cómo convierto un Int en una cadena en Kotlin?
  • Kotlin suprime 'la condición es siempre verdadera'
  • Kotlin: el operador '==' no se puede aplicar a '¡Editable!' y 'String' al comparar cadenas
  • ¿Cómo generar tags HTML de Kotlin?
  • ¿Cómo hacer reference a la class interna anónima en Kotlin?
  • Cómo establecer pivotes dynamics para girar la animation
  • Pruebas unitarias Rxjava observables que tienen un retraso