问题标签 [kotlin1.4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
418 浏览

kotlin - IntelliJ 中的 Kotlin 1.4.20 gradle kts 问题

我的 build.gradle.kts 一直面临着问题,自从我迁移到 kotlin 1.4.20 以来,整个事情基本上都是红色的。此外,gradle 版本是 6.7.1。

任何人都面临类似的问题,还是只有我一个人?任何解决方法?

当通过 cli 运行时,构建工作得非常好,但在 IntelliJ 中,整个事情都是红色的

IntelliJ 中的异常

0 投票
0 回答
152 浏览

kotlin - Jetpack Compose @Composable 函数编译成什么?

我正在探索 Android 的新声明式 UI 框架 Jetpack Compose。在学习了基础之后,我对它是如何实现的很感兴趣,其中我最感兴趣的是一个@Composable函数是如何编译的。从一些语音视频中我了解到,自 1.4 以来它需要某种 Kotlin 语言插件/功能,但他们没有说什么。我也尝试在 IntelliJ IDEA 中使用“显示 Kotlin 字节码”功能,但似乎存在编译错误。

那么在底层,这个新的 Kotlin 1.4 语言插件/功能做了什么,编译一个@Composable函数生成了哪些定义?

0 投票
0 回答
44 浏览

kotlin - 将 lambda 表达式存储在变量中会删除内联优化

我正在研究通过使用内联函数来优化调用堆栈的大小。

如果执行以下代码:

您将获得以下输出:

因此,在这种情况下,堆栈有 7 个元素。

  • 打电话main
  • 打电话function1
  • 打电话function2
  • 2 次调用 lambda 表达式
  • 打电话printCurrentStack
  • 打电话printStackTrace

现在,如果我标记function2为内联并执行代码,我会得到以下输出:

这似乎很好用,调用堆栈的大小减少了 3。
但是,如果我更新function1以在将 lambda 发送到变量之前将其存储在变量中function2

输出变为:

调用堆栈的大小从 4 变为 6,但function2仍标记为inline函数。

如果 lambda 存储在变量中,则似乎无法内联 lambda 调用。
为什么会这样?

0 投票
0 回答
87 浏览

kotlin - Kotlin 1.4 vs 1.3 中的泛型编译错误

我有以下代码(这里是Kotlin Playground 的链接):

此代码在 Kotlin 1.3.72 中编译并运行良好,但在 Kotlin 1.4.30出现以下编译错误,表示f4()无法调用f1

有趣的事实:这只发生在它是 lambda 中的最后一次调用(使其成为返回结果)时,否则它也在 1.4 中编译:

有人可以解释一下1.4中的哪些更改导致它开始无法编译吗?

0 投票
1 回答
176 浏览

kotlin - 我可以在没有相应 getter 的情况下为 Java setter 使用属性语法吗?

我有一个带有 setter 的 Java 类,但没有属性的 getter。

我想.name=从 Kotlin 分配给它

unresolved reference: name尝试编译 Kotlin 时出现错误。如果我添加一个 getter,错误就会消失,但是我可以使用 setter 作为属性而不在 Java 中定义一个 getter 吗?我知道我仍然可以p.setName("example")从 kotlin 打电话。

以上是MCVE。真实世界的代码是一个 Java 构建器,带有 setter 但不是我想从 Kotlin 使用的 getter,比如