繁体   English   中英

Intellij 中的 Kotlin 构造函数引用

[英]Kotlin constructor reference in Intellij

这不是一个真正的 Kotlin 问题,也许是一个 Intellij 问题,我不知道。

假设我们有一个数据 class

data class Person(val name: String = "untitled", val age: Int = 20)

我们有一个 function

fun factory(cstr: ()->Person) : Person {
    return cstr()
}

然后我们可以调用factory(::Person)并使用默认构造函数参数获取 Person class 的实例。

fun factory在任何地方都可以调用成功。 但是在 IntelliJ 中我得到一个红色下划线错误

在此处输入图像描述

看起来 IDE 未能识别出有默认构造函数。

但是,如果我这样更改代码,错误就会消失。 一切运行完美,IDE 中没有显示任何错误。

在此处输入图像描述

我正在使用 IntelliJ 2020.2 和 Kotlin 1.4.10。

也许是关于一些 IntelliJ 检查规则,但我找不到相关的。

此外,它是一段之前(可能是 5 个月前)没有显示错误的旧代码。 我不确定从那以后蜜蜂发生了什么变化导致了错误。

所以问题是为什么 Intellij 显示 lambda 版本错误而不是 KFunction 版本?

我假设像这样调用factory工作正常:

factory(() -> Person())

那么在这种情况下,您的 Kotlin IDE 插件版本似乎无法很好地处理构造函数引用。 编译器会,因为代码有效。 如果 IDE 插件版本是最新的,请在https://youtrack.jetbrains.com/issues/KT 提交错误

我重现了build.gradle文件中启用的旧推理的问题: freeCompilerArgs += ["-XXLanguage:-NewInference"] 请确保您在 Kotlin 1.4+ 中使用新的(默认)类型推断。 因此,删除编译器参数,应该修复 Gradle 项目重新导入 IDEA 后 IDE 突出显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM