How can I get a reference to a Kotlin object by name?

If I have a top level object declaration

package com.example

object MyObject {}

      

how to convert a string com.example.MyObject

to a reference to MyObject

?

+3


source to share


3 answers


If you have kotlin-reflect

on the classpath you can use the objectInstance

propertyKClass

fun main(args: Array<String>) {
    val fqn = "com.example.MyObject"
    val clz: Class<*> = Class.forName(fqn)
    val instance = clz.kotlin.objectInstance
    println(instance) // com.example.MyObject@71623278
}

      



if you haven't kotlin-reflect

, you can do it in a simple old java way

fun main(args: Array<String>) {
    val fqn = "com.example.MyObject"
    val clz: Class<*> = Class.forName(fqn)
    val field: Field = clz.getDeclaredField("INSTANCE")
    val instance = field.get(null)
    println(instance) // com.example.MyObject@76ed5528
}

      

+5


source


you can use kotlin reflection like:



val it = Class.forName("com.example.MyObject").kotlin.objectInstance as MyObject;

      

+1


source


The same Java code you need to use Class.forName("com.example.MyObject")

. You now have a Java class, but using an extension, kotlin

it is converted to a Kotlin class.Class.forName("com.example.MyObject").kotlin

0


source







All Articles