0

For example there is the possibility in groovy to execute a method using following code:

    @Test
    void shouldAccessMethodDynamically() {
       DynamicClass dynamic = new DynamicClass()
       String name = 'dynamicMethod'

       assert dynamic."$name"() == "dynamic"
       assert dynamic."dynamicMethod"() == "dynamic"
    }      

Is this also possible in Kotlin?

lepe
  • 24,677
  • 9
  • 99
  • 108
lennykey
  • 1,195
  • 2
  • 12
  • 25

1 Answers1

1

You can call a method by name using regular java reflection API:

val dynamic = DynamicClass()
val name = "dynamicMethod"

dynamic.javaClass.getMethod(name).invoke(dynamic)

If you like to do it in more "kotlin way", you can use it like:

DynamicClass::class.memberFunctions.find { it.name == "name" }?.call(dynamic)
Feedforward
  • 4,521
  • 4
  • 22
  • 34