开发者在编写适用于Java和Kotlin的反射代码时需要注意哪些问题?
例如,我有一个使用反射的现有库,它可以与Java很好地配合使用。然而,当我将其与Kotlin一起使用时,我的反射代码似乎无法拾取字段上的注释。
以下是我注意到的一些差异。
1. 获取Class实例
例如,我有一个使用反射的现有库,它可以与Java很好地配合使用。然而,当我将其与Kotlin一起使用时,我的反射代码似乎无法拾取字段上的注释。
以下是我注意到的一些差异。
1. 获取Class实例
// Example 1.1 - Java
Class<?> userClass = User.class; // From a class name
userClass = userInstance.getClass(); // OR from an instance
在Kotlin中获取Java类实例
// Example 1.2 - Kotlin
val userClass = userInstance.javaClass // From an instance
在Kotlin中,我无法像在Java中使用.class
功能或.getClass()
方法。
2. 代理
当我在Kotlin类中使用委托属性时,我检索到的属性具有$delegate
后缀。这与我们在Java中获得的字段有些相反(我确实了解Kotlin没有字段,只有属性)。这会影响元编程吗?
但是,使用代理时,我发现大多数方法保留其在Java中的行为。还有其他我需要注意的差异吗?
对我来说,使Java和Kotlin互操作需要了解上述1讨论的内容,以及Kotlin带来的元编程限制/差异。
Class
对象和具有增强功能的Kotlin口味KClass
。 - Jayson Minard