为什么我不能在 kotlin 中使用 lambda 接口? [复制]

2024-03-31

看,我有一个 Java 类:

public final class JavaReceiveSingle {
    public static void useSingle(Single single) {
        single.doSth();
    }
    public static void useSingle2(SingleInterface singleInterface) {
        singleInterface.doSth();
    }
}

Java 接口:

public interface SingleInterface {
    void doSth();
}

科特林接口:

interface Single {
    fun doSth()
}

现在我可以在 kotlin 类中使用 lambda,例如:

JavaReceiveSingle.useSingle2({})

但如果我想对 kotlin 接口做同样的事情:

JavaReceiveSingle.useSingle({})

IDE 将显示错误:Required: Single!找到:()->单位

如果我指定 Single 像:

JavaReceiveSingle.useSingle(Single{})

仍然错误:Interface Single 没有构造!

尽管以下代码有效:

JavaReceiveSingle.useSingle(object :Single{
    override fun aa() {}
})

但为什么我不能将 lambda 用于 kotlin 接口呢?


现在,SAM转换 https://kotlinlang.org/docs/reference/java-interop.html#sam-conversionsKotlin 中定义的接口不支持。有一个问题在YouTrack https://youtrack.jetbrains.com/issue/KT-7770,但目前我建议使用函数类型而不是单一方法接口。如果你想让他们有一个合适的名字,你可以使用类型别名 https://kotlinlang.org/docs/reference/type-aliases.html,但不要过度使用它们。在许多情况下,函数类型与良好的方法/变量名称一起就足以表达。

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

为什么我不能在 kotlin 中使用 lambda 接口? [复制] 的相关文章

随机推荐

  • 下载大型视频文件被损坏

    在服务器端代码中 我将缓冲区大小和内容长度设置为文件长度 然后使用打开文件文件输入流 稍后使用获取输出流HttpResponse getOutputStream 并转储使用读取的数据字节文件输入流 我正在使用 Apache Tomcat 7
  • 使用希伯来数字自定义
      编号

    我想要一个使用希伯来字母数字的编号列表 就像希伯来语书籍中常见的那样 拉丁语表示法使用数字 0 9 而希伯来语则按字母顺序编号 但有时值会发生变化 我不知道这在 CSS 中是否可行 但也许在 JavaScript 中可行 我基本上想要这样的
  • Selenium webdriver 无法点击页面外的链接

    我在使用 Selenium WebDriver 时遇到问题 我尝试单击窗口页面外部的链接 您需要向上滚动才能看到它 我当前的代码相当标准 menuItem driver findElement By id MTP menuItem clic
  • 无法更改 iTunes Connect 中的主要语言

    我已向 App Store 提交了我的第一个应用程序 不幸的是 我注意到主要语言设置为德语而不是英语 我尝试更改主要语言 但出现错误 为了将此应用程序的主要语言更改为英语 美国 每个版本必须已经具有所需的英语 美国 屏幕截图 但我已经上传了
  • 如何在另一个应用程序中使用一个 gwt 应用程序的源代码

    我有两个不同的 gwt 项目 并且想要在另一个模块中使用一个 gwt 应用程序的类 有什么办法可以做到这一点吗 我遵循以下方法 在第二个项目中添加了以下两行
  • 我应该使用公共变量还是私有变量?

    我第一次做一个大型项目 我有很多类 其中一些具有公共变量 一些具有带有 setter 和 getter 方法的私有变量 并且相同具有两种类型 我决定重写此代码以主要仅使用一种类型 但我不知道应该使用哪个 仅用于同一对象中的方法的变量始终是私
  • Visual Studio 2005/2012:如何将第一个花括号保持在同一行?

    尝试让我的 css C 函数看起来像这样 body color 222 而不是这个 body color 222 当我自动格式化代码时 C In the Tools菜单点击Options Click 显示所有参数 左下角的复选框 显示所有设
  • 使用 C# 按创建日期降序获取目录中的文件列表

    我想使用 C 获取按创建日期排序的文件夹中的文件列表 我正在使用以下代码 if Directory Exists folderpath DirectoryInfo dir new DirectoryInfo folderpath FileI
  • URL 问号后面的部分是什么术语?

    http www example com foo 该术语是什么foo网址的一部分 这是query 或者有时请求参数 从中捏取有用的图表URI RFC https datatracker ietf org doc html rfc3986 s
  • lua检查多个值是否相等

    我喜欢用 Roblox 制作游戏 并用 lua 编写代码 在编写游戏时 我发现自己经常问一个值是否等于另一个值 这可能会产生很长的代码行 并且可能非常重复 例如 如果 x ClassName 衬衫 或x ClassName 附件 或x Cl
  • (转)发送http请求时如何控制gzip压缩?

    我想问一下大家在请求HTTP Post消息时如何控制gzip压缩 Accept Encoding gzip 作为 Http 请求标头始终添加到我发送的 http 请求中 但我不想使用 gzip 压缩 我该如何处理 在执行http NewRe
  • 在onPause而不是onDestroy中释放资源

    这是关于后蜂窝状 即Android 3 0 以及下面的引用来自https developer android com reference android app Activity html https developer android c
  • Rails 应用程序错误 - ActiveRecord::PendingMigrationError 迁移正在挂起;运行“rake db:migrate RAILS_ENV=development”来解决此问题

    数据库已创建 表已创建 数据已存在 但是当我重新启动Rails应用程序后 我收到了这个错误 该应用程序正在使用 MySQL 这里有什么问题 先感谢您 Solution 只需运行 rake db migrate 在服务器启动之前需要运行一些迁
  • 如何向java简单日期格式添加天数

    如何在使用简单日期格式获得的当前日期上添加 120 天 我看过一些关于它的帖子 但无法让它发挥作用 我的代码如下 SimpleDateFormat dateFormat new SimpleDateFormat dd MM yyyy get
  • 使用 JavaScript 打开另一个 html 页面时传递变量

    这可能是一个非常愚蠢的问题 但我在网上找不到它 而且我已经寻找了至少一个小时 我有一个链接 a href MusicMe html Instruments a 我想在单击后获取它的 ID 因为我需要将一些变量传递到我打开的页面以知道仪器链接
  • 2 个 2D 向量的叉积

    任何人都可以提供一个返回叉积的函数的示例TWO二维向量 我正在尝试实施这个算法 http www blackpawn com texts pointinpoly default html C 代码会很棒 谢谢 EDIT 找到了另一种适用于
  • 查找 NxN 网格中所有路径的算法

    想象一个机器人坐在 NxN 网格的左上角 机器人只能向两个方向移动 向右和向下 机器人有多少种可能的路径 我可以在谷歌上找到这个问题的解决方案 但我对解释不是很清楚 我试图清楚地理解如何解决这个问题并用Java实现的逻辑 任何帮助表示赞赏
  • Android 自定义视图应扩展 AppCompatTextView

    我创建了简单的自定义视图 它扩展自TextView 在 Android Studio 中我收到此警告 This custom view should extend android support v7 widget AppCompatTex
  • 独立移动应用程序上的 WebRTC

    我知道WebRTC是为浏览器设计的 但是可以直接在移动应用程序上使用WebRTC库吗 Thanks 截至5月14日here https github com pchab AndroidRTC是一个android项目 使用WebRTC效果很好
  • 为什么我不能在 kotlin 中使用 lambda 接口? [复制]

    这个问题在这里已经有答案了 看 我有一个 Java 类 public final class JavaReceiveSingle public static void useSingle Single single single doSth