簡體   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