Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

260
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda