在 Java 中为 Kotlin 编译器注释类型参数

2024-01-06

在Java中,我有以下方法:

public Optional<Foo> getFoo() {
    // always return some non-null value
}

在 Kotlin 代码中,该方法的返回类型为Optional<Foo!>!。通过使用@Nonnull注释我可以将其缩减为Optional<Foo!>(即只有Foo类型不再进行空检查)。

有没有办法对方法进行注释,使 Kotlin 编译器正确地对返回值进行空检查?


您可以通过注释来做到这一点type use https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html of Foo与一些Kotlin 编译器理解的可空性注释 https://kotlinlang.org/docs/reference/java-interop.html#nullability-annotations。不幸的是,列表中的某些注释库不支持类型使用注释。

我找到@NotNull from org.jetbrains:annotations:15.0 https://mvnrepository.com/artifact/org.jetbrains/annotations/15.0(但不是 13.0)有TYPE_USE目标,因此您可以将库作为依赖项添加到项目中并注释类型使用:

import org.jetbrains.annotations.NotNull;

...

public @NotNull Optional<@NotNull Foo> getFoo() {
    // always return some non-null value
}

那么返回类型将被视为Optional<Foo>在科特林中。

当然,这可以使用我上面提到的列表中支持的任何其他可空性注释来完成TYPE_USE target.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中为 Kotlin 编译器注释类型参数 的相关文章

  • Doctrine ORM 按注释对象字段排序

    所以它很简单 我在某个实体中有以下代码 var ServiceOffer ORM OneToMany targetEntity ServiceOffer mappedBy serviceProvider ORM OrderBy servic
  • 如何使用 Kotlin 在 ListAdapter 中使用 Filterable?

    我会用一个SearchView过滤我的RecyclerView 在 stackoverflow 和其他网站上我发现只是使用的示例Filterable与 Java 和RecyclerView Adapter当我使用时ListAdapter 所
  • Spring 中 JavaConfig 相对于 XML 配置的优势?

    早些时候 配置曾经在代码中硬编码 后来它被外部化到 property 文件 为了避免硬编码值 避免为了更改配置而更改代码 等等 然后它转移到 XML 为了为了更加标准化 无错误等 现在 在阅读 Spring 3 中的 Configurati
  • 如何找到类路径上具有特定方法注释的所有类?

    我想在Java中实现一个基于注释的初始化机制 具体来说 我定义了一个注释 Retention RetentionPolicy RUNTIME Target ElementType METHOD public interface Initia
  • Kotlin 中是否有类似于 #region #endregion 的语法?

    我知道我可以使用 region endregion 包围 C 中的代码片段 Kotlin 中是否有类似的语法 谢谢 region MyRegion protected void Page Load object sender EventAr
  • Kotlin 协程阻塞 Android 中的主线程

    我是 Kotlin 和协程的新手 我有一个fun在我的活动及其内部 检查User用户名和密码 如果为真 则返回Users object 一切都好 但是当我按下按钮时 我的活动被阻止并等待响应Users login 我用这个有趣的 priva
  • Android 改造参数化@Headers

    我正在使用 OAuth 每次发出请求时都需要将 OAuth 令牌放入标头中 我看到 Header注释 但是有没有办法让它参数化 以便我可以在运行时传入 这是概念 Header Authorization OAuth var api vers
  • Kotlin 中的枚举类对于 Android 来说是否像 Java 中那样“昂贵”?

    Are EnumKotlin 中的类对于 Android 来说 昂贵 就像 Java 一样 还可以用吗 IntDefs or StringDefs在科特林 当我将 Kotlin Enum 类反编译为 Java 类时 底层仍然使用了 Java
  • Kotlin 中的单例类

    我想知道如何在 Kotlin 中创建一个单例类 以便我的 Util 类在每次应用程序执行时仅实例化一次 但是 当我将 Java 类转换为 kotlin 时 生成了以下代码 它是否正确 companion object private var
  • Django 跨反向关系聚合

    鉴于这两个模型 class Profile models Model user models ForeignKey User unique True verbose name user about models TextField abou
  • Moshi 无法解析 nullable

    你好 希望你能帮助我 使用 kotlin Retrofit2 moshi 我从 https api spacexdata com v3 launches 获取数据并解析它 一切都很顺利 我得到的属性如下 flight number miss
  • @Transactional 注解属于哪里?

    如果您将 Transactional in the DAO类和 或其方法 或者注释使用 DAO 对象调用的服务类是否更好 或者注释两个 层 是否有意义 我认为事务属于服务层 它是了解工作单元和用例的人 如果您将多个 DAO 注入到需要在单个
  • 在viewpager2中禁用动画

    我有 viewpager2 和扩展 FragmentStateAdapter 的适配器 我希望用户仅通过单击选项卡布局即可转到另一个页面 我已禁用此 viewpager2 的用户输入 但是当我单击选项卡时 有页面之间快速滑动的动画 但我只想
  • Java获取编译时安全方法名

    在使用反射类和注释时 我发现没有明确的方法以编译时安全的方式引用方法名称 我真正想要的是能够在注释中引用方法 可能看起来像 CallAfter method Foo class foo void Bar 目前 您只能使用字符串来执行此操作
  • 如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?

    我对 Android 架构组件的使用非常陌生 因此我决定使用 GithubBrowserSample 来构建我的应用程序来实现我的许多用例 但我有一个问题 我不知道使用这种方法在片段之间共享视图模型的正确方法是什么 我想共享视图模型 因为我
  • 更新到 Kotlin 1.3.30 后出现“未解析的引用:Parcelize”

    我使用 Kotlin 1 3 21 很长时间了kotlin android extensions插件长期处于实验模式 今天我通过升级版本切换到 Kotlin 1 3 30 现在无论我使用什么 Parcelize注释我看到错误 Unresol
  • 如何在 IntelliJ Kotlin 项目中使用条件断点动态调试变量时更改值?

    在 Java 项目中 通过 mis 调试时可以实现这一点 使用条件断点为属性或变量设置值 Java断点 https i stack imgur com I4JL2 png 不幸的是 同样的事情在 Kotlin 项目中是不可能的 错误是 赋值
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • 如何在Android Compose中使用otf类型字体文件?

    我正在学习使用 Android Jetpack Compose 现在我有一个正则 otf字体文件在资产 字体 我想在文本中使用它 java lang RuntimeException Font asset not found commonu
  • Kotlin super.finalize()

    当迁移到Kotlin from Java我遇到了一个问题 我覆盖了Object s finalize method Override protected void finalize throws Throwable stopTimer su

随机推荐

  • Twitter Typeahead 远程未完成某些查询

    我正在使用 Twitter Typeahead 版本 0 11 1 现在我正在尝试让远程工作正常进行 但不知何故我认为我的行为很奇怪 这是带有本地数组的工作代码 var localArray value test0 value test1
  • 如何在 gdb 脚本中确认操作(回答“Y”)?

    我使用 gdb 来调试我的 C 代码 我是这样设置断点的 gdb break ParseDriver cc 60 No source file named ParseDriver cc Make breakpoint pending on
  • CodeIgniter - 将输入数组写入数据库

    我正在尝试从输入字段数组中获取数据并将其写入数据库 我以前从未使用过数组 但这是我的代码 它基于如果它只是一个输入值我会做什么 我知道这是错误的 但我不知道下一步该尝试什么 有任何想法吗 谢谢 view
  • 石英作业详细请求恢复

    的文档JobDetail requestsRecovery属性说明以下内容 指示调度程序是否应重新执行作业 如果遇到 恢复 或 故障转移 情况 现在 什么是 恢复 情况或 故障转移 情况 它们有何不同 仅当 JVM 在作业执行期间崩溃时才会
  • Spring 测试多次关闭嵌入式数据库

    我正在使用 h2 嵌入式数据库 其定义如下
  • Spring存储库自动转换具有不同类类型的实体

    我正在使用 MongoRepository 接口来扩展不同实体的自定义存储库 现在我面临问题 让我们假设一个例子 我有 2 个实体 Document collection person public class Employee priva
  • .NET Signalr MapConnection 已过时?

    我是 Net 和 SignalR 的新手 我正在查看前同事编写的一些代码 他将这一行添加到路由配置中 该配置现在抛出错误 表示其已过时 但所有文档 https github com SignalR SignalR wiki QuickSta
  • 在哪里指定 IISExpress 的 SSL 端口?

    好的 所以我以前可以在项目属性对话框中更改 SSL 端口号 但是在 asp net 5 RC1 更新后 SSL 字段是只读的 当我尝试直接编辑 xproj 时 它会忽略 SSLPort 值
  • Python One Liner 静默套接字侦听器

    是否可以编写 python one liner 它将监听特定的 tcp 端口 接受连接 并且不响应任何内容 我可以用两行来完成此操作 import socket s socket socket socket AF INET socket S
  • 如何使用 graphene-django 上传和下载文件?

    我目前正在使用 graphene django v2 0 我完全不知道如何上传和下载图像等文件 是否有人有一个可以下载图像的查询示例和一个可以上传的突变一 UPLOADS 您不需要发明自己的前端代码来将文件上传添加到突变中 现有的包已经可以
  • R dplyr - 所有列都不同

    有没有办法指定 dplyr distinct 应使用所有列名而不诉诸非标准评估 df lt data frame a c 1 1 2 b c 1 1 3 df gt distinct a b keep all FALSE behavior
  • VSCode 中 JetBrains 的“部署”等效项?

    在 JetBrains IDE 例如 CLion 或 PyCharm 中 我可以设置 部署 这样如果我右键单击任何本地文件或目录 我可以通过 SSH 将其 部署 到远程服务器上的相应位置 通信是通过多个 映射 建立的 它比手动 scp 每个
  • 如何聚焦第一个输入?

    我有一个 ASP NET MVC 应用程序 我想关注第一个错误字段 提交时 如果最后一个字段有错误并且用户尝试提交表单 则焦点将转到最后一个错误字段而不是第一个字段 我尝试了多种 包括以下内容 ready function Form sub
  • Django Select Option选择问题

    我尝试按照 stackoverflow 上的一些示例来获取在选择列表中选择的选项 但仍然无法使其工作 这是我的代码片段
  • C++内存对齐问题

    一行代码胜过一千个字 这是我的问题 Platform specific 16 byte alignment macro switch On Visual C it would substitute declspec align 16 On
  • “if”语句在 Debian Linux 上不起作用

    我有一个 bash 脚本 其中包含以下 if 语句 问题是我无法让它在 Debian 上运行 它在 Fedora 和 CentOS 上运行良好 if 1 daily lt line 116 then countDaily elif 1 mo
  • Qt - 使用 lambda 将槽与参数连接

    我有几个小部件将连接到需要额外参数的单个函数 我发现我可以使用 lambda 函数来向函数传递一些参数 问题是参数在循环中被替换 而 lambda 函数仅传递最后一组参数 这是我得到的 自我小部件是一个字典 其中包含一组按钮的按键 为了简短
  • 如何将充满 UNIX 时间字符串的文件转换为人类可读的日期?

    我正在处理一个充满 unix 时间字符串的文件 我想将它们全部转换为人类可读的 该文件看起来像这样 1153335401 1153448586 1153476729 1153494310 1153603662 1153640211 这是脚本
  • 存在部分移动错误的结构

    我有一个简单的结构和它的两个实例 如下所示 derive Debug struct User first String last String age u32 let u1 User first String from John last
  • 在 Java 中为 Kotlin 编译器注释类型参数

    在Java中 我有以下方法 public Optional