在 Java 中,我们编写.class(例如:)String.class来获取有关给定类的信息。在 Kotlin 中,您可以编写::class或::class.java. 它们之间有什么区别?
ard*_*nit 21
通过使用::class,您可以获得 KClass 的一个实例。它是 Kotlin 反射 API,可以处理 Kotlin 特性,如属性、数据类等。
通过使用::class.java,您可以获得 Class 的一个实例。它是 Java 反射 API,可与任何 Java 反射代码互操作,但不能与某些 Kotlin 功能一起使用。
Nul*_*e08 15
首先您需要了解反射。根据文档:
反射是一组语言和库功能,允许在运行时内省自己的程序的结构。
简而言之,它使您能够获取您编写的代码,即您定义的类名、您定义的函数名等。您编写的所有内容,您都可以在运行时使用Reflection.
::class和::class.java是反射的基本特征。
::class给你一个KClass<T>参考,::class.java给你Class<T>参考。例子,
val a = MyClass::class
Run Code Online (Sandbox Code Playgroud)
可以解释为
val a = KClass<MyClass>()
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码在语法上不正确,因为KClass是一个接口,并且接口无法实例化。这只是为了给你一个想法。
类Class<T>为您提供有关 T 类的元数据的信息,例如它正在实现的接口、其函数名称、其包名称等。
KClass与 类似,Class但它提供了比 . 更多属性(Kotlin 相关属性)的信息Class。KClass<T>此处列出了参考资料可以为您提供的有关 T 类的所有信息https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/#properties
根据 Kotlin 文档,当我们使用以下任何类类型创建对象时,引用类型将是 KClass 类型。
val c = MyClass::class // reference type of KClass
Run Code Online (Sandbox Code Playgroud)
Kotlin 类引用与 Java 类引用不同。要获取 Java 类引用,请使用 KClass 实例上的 .java 属性。
val c = MyClass::class.java // reference type of Java
Run Code Online (Sandbox Code Playgroud)
您可以参考 Kotlin 文档了解更多详情。 https://kotlinlang.org/docs/reference/reflection.html#class-references
| 归档时间: |
|
| 查看次数: |
4066 次 |
| 最近记录: |