当前位置: 首页 > 知识库问答 >
问题:

柯特林能否在类文件中发出 JSR-305 注释

宁良平
2023-03-14

我在用Kotlinhttps://github.com/vojtechhabarta/typescript-generator为API中使用的类生成TypeScript定义

为了保留可空性信息,类型脚本生成器可以使用字段和方法上存在的注释。它支持构建脚本中列出的任意注释类名。

出于某种原因,静态编程语言使用@org.jetbrains.annotations.Nullable而不是JSR-305注释@javax.annotation.Nullable注释可空字段。

虽然JSR-305注解具有RetentionPolicy.RUNTIME,但JetMind注解具有RetentionPolicy.CLASS,这使得它不适合使用Java反射来检测注解的库进行自省。

有可能让Kotlin生成基于标准的注释而不是JetBrains专有的注释吗?

如果没有,我对处理这个问题的简单解决方案很感兴趣。也许是一个Gradle插件,可以从JetBrains或类似的插件生成JSR-305注释。我真的不想用@Nullable对所有内容进行双重注释。

共有1个答案

索寒
2023-03-14

Kotlin被设计成发出自己的(JetBrains)注释。做出这一选择是因为JSR 305从未发布,而且JetBrains没有合法的方式将JSR 305注释与编译器捆绑在一起,因为(Hibernate的)JSR 305上的许可证不允许这样做。< code > com . Google . code . FindBugs:jsr 305 maven工件的法律地位同样模糊不清,因为< code>javax包名称空间是专门为JSR保留的。

有以下可能的解决方案:

>

  • 编写一个自定义 Gradle 插件,对 Kotlin 编译的类文件进行后处理,并将 org.jetbrains.annotations.* 注释更改为相应的 javax.annotation.* 注释(不取消非空将可为 Null可为 Null),并将相应的属性从运行时不可见的注释更改为运行时可见的注释。

    修补< code > typescript-generator ,以便它除了使用Java反射之外,还使用Kotlin反射API从Kotlin类中获取可空性信息。该任务的入口是Java Class实例的kotlin扩展,它允许检索所有Kotlin元数据。

    将< code > Jackson-module-kot Lin 添加到< code > typescript-generator 中。该模块使用Kotlin的反射来获取所有Kotlin特定的信息并将其提供给Jackson,而< code > typescript-generator 使用Jackson bean内省来获取其类型信息,因此它可能会正常工作。

  •  类似资料:
    • 我正在尝试使用静态编程语言反射从类及其成员生成JFrames。我创建了几个注释,其中一些在运行时存在,一些不存在。 组件注释: 启用注释: 我是这样使用这两个注释的: 如果我运行下面的代码: 我得到的唯一输出是这样的:< code>btn: [Component] 由于Retention设置为

    • 问题内容: 我已经看到了JSR305与JSR308(Java类型注释)的问题- 哪个将成为标准?而且我了解JSR308和JSR305之间的区别。 我也了解到,此时Java 308的版本是308,而305不是。我对305的整体状态感到好奇。 具体来说,我在某些项目中使用了Google Collections和JSR-305(与Guice最佳实践的倡导者所采用的方式类似),并且想知道我是否应该使用更“

    • 我如何将下面的代码从Java转换成Kotlin?

    • 我对科特林聪明的演员感到困惑。在我看来,等价于

    • 我已经实现了一个函数,我过去常常传递给anko的应用程序递归。 在这个函数里面,我想添加一个边际结束是视图在一个LinearLayout里面,所以我写了下面的代码: 我收到错误,即视图.布局参数是一个可变属性,可以更改。所以我不得不强迫演员: 在这里看堆栈溢出,我看到 Kotlin 不会在可为空的变量中智能强制转换,但 view.layoutParams 不能为空,那么为什么智能强制转换无法推断出

    • 我正在使用蓝牙LE来获取周围的设备,但是我没有得到一个列表,而且我还得到一个运行时异常,这里是stack-trace 代码在这里 我不明白为什么data抛出null