📜  如何在 Kotlin 中获取课程?

📅  最后修改于: 2022-05-13 01:54:44.563000             🧑  作者: Mango

如何在 Kotlin 中获取课程?

Kotlin 是 JetBrains 开发的一种静态类型的通用编程语言,构建了 IntelliJ IDEA、PhpStorm、Appcode 等世界一流的 IDE。它由 JetBrains 于 2011 年首次推出,是一种新的 JVM 语言。 Kotlin 是一种面向对象的语言,是一种比Java“更好的语言”,但仍可与Java代码完全互操作。在本文中,我们将讨论如何在 Kotlin 中获取类引用。首先,我们将使用反射。那么让我们看看是什么

反射:

  • 它是一个库,提供了在运行时而不是编译时检查代码的能力。在Java中,我们可以通过getClass()来获取变量的类,例如。类()
  • 让我们看看如何在 Kotlin 中解析变量的类。

例子

以下是获取类名的不同实现。

Kotlin
import kotlin.reflect.KClass
val  T.kClassName: KClass
get() {
    return javaClass.kotlin
}


Kotlin
val  T.classNameKotlin: String?
get() {
    return javaClass.kotlin.simpleName
}


Kotlin
fun main(){
  val userAge = 0
  
  println(userAge.kClassName) 
  Output: class java.lang.Integer (Kotlin reflection is not available)
  
  println(userAge.classNameKotlin)
  Output: Int
  
  println(userAge.classNameJava)
  Output: Integer
}


在这里我们可以得到 Kotlin 中的类名

科特林

val  T.classNameKotlin: String?
get() {
    return javaClass.kotlin.simpleName
}

以下是以下操作的输出。

科特林

fun main(){
  val userAge = 0
  
  println(userAge.kClassName) 
  Output: class java.lang.Integer (Kotlin reflection is not available)
  
  println(userAge.classNameKotlin)
  Output: Int
  
  println(userAge.classNameJava)
  Output: Integer
}

Java 解析变量名称的等价物是使用.getClass ()方法,例如something.getClass() 。在 Kotlin 中,我们可以使用something.javaClass 来实现相同的目的。为了获得对反射类的引用,我们曾经在Java中做something.class ,它的 Kotlin 等价物是something::class 。这将返回一个KClass 。这个KClass的特殊之处在于它提供了与 Java 反射类提供的能力非常相似的自省能力。请注意, KClass与 Java 的 Class 对象不同。如果要从 Kotlin 的KClass中获取Java Class 对象,请使用. Java扩展属性:

val somethingkClass: KClass = Something: :class
val a: Class< Something> = somethingkClass. java
val b: Class < Something> = Something: : class . java

后一个示例将被编译器优化为不分配中间 KClass 实例。如果您使用 Kotlin 1.0,您可以通过调用.kotlin扩展属性将获取的Java类转换为 KClass 实例,例如:

something.javaClass.kotlin.

正如刚才所描述的,KClass 为您提供了自省功能。这里有几个KClass的方法:

  • isAbstract:如果这个类是抽象的,则为真
  • isCompanion:如果这个类是伴生对象,则为真
  • isData:如果这个类是一个数据类,则为真
  • isFinal:如果这个类是最终的,则为真
  • isInner:如果这个类是一个内部类,则为真
  • isOpen:如果这个类是开放的,则为真