Cómo get la llamada de la function kotlin

Con este ejemplo:

open class Parent { fun some():Parent { return this; } } class A : Parent(){ val name:String? = null; } 

Pero luego este código da como resultado un error:

 val a = A().some().some() a.name // ERROR 

NOTA DEL EDITOR: según los comentarios del autor a las respuestas a continuación, NO se trata de hacer reference a un a.name sino que se trata de algo así como "¿cómo obtengo la instancia de la class o su nombre que primero inició la cadena de llamadas a methods?" . Lea todos los comentarios a continuación hasta que el OP edite esto para mayor claridad.

mi objective final es devolver el tipo de llamante y puedo llamar a la propiedad de la instancia de esta persona que llama, no más como, no más, ¿alguna idea?

En realidad, su ejemplo está funcionando (si agrega palabras key open porque todas las classs en Kotlin son definitivas por defecto:

A.kt

  open class A { fun some(): A { return this } } 

B.kt

  class B : A() { val test = "test" } 

Y uso

 val tmpB = (B().some().some() as B) val test = tmpB.test 

Editado: Se debe a que la function some () devuelve la class padre que no tiene propiedad de class secundaria. Por lo tanto, debe convertirlo en class secundaria. (Código de actualización)

Al igual que java , puedes usar getMethodName() . Consulte el documento de kotlin .

 open class Parent{ open fun foo(): Parent { return this; } } 

Esta es tu class de Parent . Parent class para Parent tiene un método llamado foo() . foo() es un método de class A que devolverá la instancia de su propia class. Debemos abrir la class y el método porque, de forma pnetworkingeterminada, su modificador de visibilidad es definitivo.

 class A : Parent() { override fun foo(): A { return this } } 

Esta es una class llamada A que extiende la class de Parent . foo() es un método de class A que devolverá la instancia de su propia class.

Lo llamaremos así:

 var a = A().foo().foo() 

Tu class siempre devuelve la instancia principal. Esta class no tiene ningún campo con el nombre del name . Para hacer eso tienes 2 maneras:

El primero:

 open class Parent{ fun some():Parent{ return this } } class A :Parent(){ val name:String? = null } fun main() { val a = (A().some().some() as A) a.name = ""; } 

El segundo:

 open class Parent{ open fun some():Parent{ return this } } class A :Parent(){ override fun some():A { return this } val name:String? = null } fun main() { val a = A().some().some() a.name = ""; } 

Yo sé cómo hacer esto:

@Avijit Karmakar

@ Trần Đức Tâm

utilizar la function en línea

  inline fun <reified T:Any> some(sql: String):T { return this as T ; } 
  • ¿Kotlin's Float, Int etc está optimizado para los types incorporados en la JVM?
  • Conversión de KClass de Kotlin a class regular en Java
  • ¿Existe una forma limpia de DRY para actualizar múltiples textViews desde la request HTTP JSON?
  • Llamando countDownTimer
  • ¿Cómo escribir una transformación reutilizable para el valor de String to Enum en un grupo de classs Enum? (Kotlin)
  • Hashmap con tipo de datos ArrayList (Kotlin)?
  • Kotlin: crea una matriz regular como en Java
  • Comportamiento impar de TestObserver al suscribirse a un Asunto
  • ¿Cómo hacer valer un String vacío y no nulo en Kotlin?
  • Clases de Kotlin sin llaves
  • Los datos de Google Fit no leen desde la nube, solo leen localmente