如何在 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:如果这个类是开放的,则为真