开发人员在编写适用于Java和Kotlin的反射代码时应注意的注意事项是什么?
例如,我有一个使用反射的现有库,它与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
我无法像在Java中那样使用Kotlin中的.class
功能或.getClass()
方法。
2.代表们
当我在Kotlin类中使用委托属性时,检索到的属性带有$delegate
后缀。这与我们在Java中获得的字段有点相反(我知道Kotlin没有字段,只有属性)。这如何影响元编程?
但是,在委托中,我看到大多数方法都像在Java中一样保留其行为。我还有其他需要注意的区别吗?
要使Java和Kotlin对我可以互操作,需要理解上面讨论的1,以及Kotlin在元编程中带来的其他限制/差异。
例如,我有一个使用反射的现有库,它与Java很好地兼容。但是,当我在Kotlin上使用相同的代码时,我的反射代码似乎没有拾取字段上的注释。
可能是因为这些字段现在是私有的吗?
无论如何,目前字段上存在注释问题,这将在即将到来的里程碑中解决。
其他一些相关问题:
我无法像在Java中那样在Kotlin中使用.class工具或.getClass()方法。
只是语法不同:与的功能javaClass<C>()
完全相同C.class
,并且x.javaClass
与的功能相同x.getClass()
当我在Kotlin类中使用委托属性时,检索到的属性带有$ delegate后缀。
较小的更正:字段具有$delegate
后缀,而不是属性。
但是,在委托中,我看到大多数方法都像在Java中一样保留其行为。我还有其他需要注意的区别吗?
此处的文档为您详细介绍了如何实现委托属性。
要使Java和Kotlin对我可以互操作,需要理解上面讨论的1,以及Kotlin在元编程中带来的其他限制/差异。
您的Kotlin代码与Java代码越相似,从反射的角度来看,差异就越小。如果您编写惯用的Kotlin,例如使用默认参数值,特征,属性,委托,顶级函数,扩展等,则所获得的类与惯用的Java不同,否则它们会紧密对齐。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句