¿Cómo puedo get una reference a un object Kotlin por su nombre?

Si tengo una statement de object de nivel superior

package com.example object MyObject {} 

¿cómo puedo convertir la cadena com.example.MyObject en una reference a MyObject ?

Si tiene kotlin-reflect en classpath, puede usar la propiedad KClass de KClass

 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 } 

si no tienes kotlin-reflect entonces puedes hacerlo en un simple y antiguo path de java

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

puedes usar la reflexión de kotlin, por ejemplo:

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

Igual que un código de Java, necesita usar Class.forName("com.example.MyObject") . Ahora tienes una class Java, pero usando la extensión kotlin , se convierte a la class Kotlin. Class.forName("com.example.MyObject").kotlin

  • Implementando una interfaz de kotlin en java
  • Kotlin: ¿Cómo se accede a los methods get y setValue de un delegado?
  • ¿Hay alguna manera de identificar una class de datos Kotlin de una class regular de Kotlin?
  • Crear una nueva instancia de una KClass
  • Interoperabilidad de reflexión de Kotlin con Java
  • Kotlin: isAssignableFrom y reflexiones del tipo de reflexión
  • instancia :: class.java vs. instance.javaClass
  • El operador de Kotlin Reflection obtiene la implementación
  • ¿Cómo hacer inferencia tipo Kotlin desde la reflexión KClass?
  • ¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?
  • ¿El comstackdor de Kotlin siempre conserva los nombres de los parameters en bytecode?