【发布时间】:2015-03-27 06:38:34
【问题描述】:
开发人员在编写适用于 Java 和 Kotlin 的反射代码时应注意哪些注意事项?
例如,我有一个使用反射的现有库,它适用于 Java。但是,当我在 Kotlin 中使用相同的代码时,我的反射代码似乎没有提取字段上的注释。
以下是我注意到的一些差异。
1.获取类实例
// 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
我无法像在 Java 中那样在 Kotlin 中使用 .class 工具或 .getClass() 方法。
2。代表
当我在 Kotlin 类中使用委托属性时,我检索的属性具有 $delegate 后缀。这与我们在 Java 中获得的字段有点相反(我知道 Kotlin 没有字段,只有属性)。这对元编程有何影响?
但是,对于委托,我发现大多数方法都保留了它们在 Java 中的行为。还有其他我需要注意的区别吗?
让 Java 和 Kotlin 可互操作需要了解上面讨论的 1,以及 Kotlin 给元编程带来的其他限制/差异。
【问题讨论】:
-
#1 不是问题,它只是有一个不同的名称来区分 Java
Class对象和具有一些增强功能的增强 Kotlin 风格KClass。
标签: java reflection metaprogramming kotlin