Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

259
Vistas
kotlin: comprobar si una clase es una clase de objeto?

Tengo un objeto kotlin y una clase java como:

KotlinObject.kt

 object KotlinObject{ .... }

JavaClass.java

 class JavaClass { ... }

y una función kotlin para verificar:

 fun foo(cls: Class<*>): Any { if (cls is kotlin's object) { //how to do this? return ? //wanna return object's instance } else { return cls.newInstance() } }

Puedo pasar el objeto kotlin o la clase java a esta función:

 foo(KotlinObject::class.java) foo(JavaClass::class.java)

Entonces, ¿es posible saber cuál es el objeto de Kotlin?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Gracias a @Alexey Romanov por señalar en los comentarios que la información de la clase Kotlin está disponible en Class<*> .

 fun foo(cls: Class<*>) { if (cls.kotlin.objectInstance != null) println("KotlinObject") else println("Other class") }

Mi enfoque original fue imitar Kotlins KClass.objectInstance .

Guardo esto como referencia, pero use la solución anterior.

 fun foo(cls: Class<*>) { val objectInstance = cls.declaredFields.firstOrNull { it.type == cls && it.name == "INSTANCE" } if (objectInstance != null) println("KotlinObject") else println("Other class") }

Tenga en cuenta que cualquier Java Singleton que use el nombre 'INSTANCIA' para el campo singleton también se informará como objeto Kotlin en ese caso.

over 4 years ago · Santiago Trujillo Denunciar

0

¡Entiendo!

 object KotlinObject{} class JavaClass {} fun foo(cls: KClass<*>) { if (cls.objectInstance != null) println("It's a Kotlin object") else println("It's NOT a Kotlin object") } fun main(args: Array<String>) { foo(KotlinObject::class) foo(JavaClass::class) }

Producción:

 It's a Kotlin object It's NOT a Kotlin object

Si, por alguna razón, debe pasar la clase Java, entonces no pude encontrar ninguna forma de hacerlo. Creo que toda la distinción se ha ido.

NOTA: Esto funciona incluso si JavaClass está definido en un archivo Java. Cada objeto en Kotlin es del tipo KClass independientemente de cómo y dónde se definió. Es decir, ::class funciona en cualquier objeto en Kotlin.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda