Types Kotlin可以在类文件中发出JSR-305注释吗
我使用Kotlin with为API中使用的类生成类型脚本定义 为了保留可空性信息,typescript生成器可以使用字段和方法上的注释。它支持生成脚本中列出的任意注释类名 出于某种原因,Kotlin使用Types Kotlin可以在类文件中发出JSR-305注释吗,types,kotlin,nullable,Types,Kotlin,Nullable,我使用Kotlin with为API中使用的类生成类型脚本定义 为了保留可空性信息,typescript生成器可以使用字段和方法上的注释。它支持生成脚本中列出的任意注释类名 出于某种原因,Kotlin使用@org.jetbrains.annotations.nullable而不是JSR-305注释@javax.annotation.nullable对可空字段进行注释 JSR-305注释具有RetentionPolicy.RUNTIME,而Jetbrains注释具有RetentionPolicy.
@org.jetbrains.annotations.nullable
而不是JSR-305注释@javax.annotation.nullable
对可空字段进行注释
JSR-305注释具有RetentionPolicy.RUNTIME
,而Jetbrains注释具有RetentionPolicy.CLASS
,因此不适合使用Java反射检测注释的库进行内省
有可能让Kotlin生成基于标准的注释而不是JetBrains专有的注释吗
如果不是,我对处理这个问题的简单解决方案感兴趣。也许是一个Gradle插件,可以从JetBrains或类似的插件生成JSR-305注释。我真的希望不必使用
?
和@Nullable
双重注释所有内容,Kotlin设计用于发出自己的(JetBrains)注释。之所以选择此选项,是因为它从未发布过,JetBrains也没有合法的方式将JSR305注释与编译器捆绑在一起,因为(休眠)JSR305上的许可证不允许这样做。com.google.code.findbugs:jsr305
maven工件的法律地位同样模糊,因为javax
包名称空间是专门为jsr保留的
有以下几种可能的解决方案:
org.jetbrains.annotations.*
注释更改为相应的javax.annotation.*
注释(NotNull
到Nonnull
和Nullable
到Nullable
)并将相应的属性从运行时不可见批注更改为运行时可见批注typescript生成器
,以便它除了使用Java反射之外,还使用Kotlin反射API从Kotlin类获取空性信息。该任务的入口点是JavaClass
实例的扩展,它允许检索所有Kotlin元数据类型脚本生成器
。此模块使用Kotlin的反射来获取所有Kotlin特定的信息并将其提供给Jackson,而typescript generator
使用Jackson bean内省来获取其类型信息,因此它可能会正常工作谢谢你的建议。我认为唯一合理的方法是#3,但不幸的是,它需要修补typescript生成器才能使用该模块获取元数据,就像这样。Kotlin团队非常注重java互操作性,但是,如果不编写Kotlin特定的代码,就无法确定可空性,这似乎是他们的一个重大疏忽。java设计人员的一个重大疏忽(十亿美元的疏忽!)就是在java中没有获取可空性信息的标准方法,所以唯一的办法就是通过Kotlin的特定手段。