samedi 7 janvier 2023

How to call constructor default lambda using Kotlin Refelction?

Trying to call lambda provided by MyClass constructor using Kotlin Reflection.

data class MyClass(
    var magic:Int=2,
    var lambdaValue: ()->String =  { //trying to call this lambda from reflection
        "Working"
    },
)
fun main(args: Array<String>) {
    val clazz=MyClass::class
    val obj=clazz.createInstance()

    val kProperty=clazz.memberProperties

    clazz.constructors.forEach{cons-> // for each construtor
        cons.parameters.forEach{ parameter-> // looping through constructor parameters
            val property=kProperty.find { it.name==parameter.name } // finding the exact property
            print(parameter.name+" : ")

            if(parameter.type.arguments.isEmpty()) // if empty Int,Float
            {
                println(property?.get(obj))
            }else{
                println(property?.call(obj)) // unable to call lambda
            }
        }
    }
}

property.call(obj) returns Any which is not invokable. Any solution?

Expected:

magic : 2
lambdaValue : Working




Aucun commentaire:

Enregistrer un commentaire