无法将“字符串”分配给“ T”

时间:2020-05-24 08:59:54

标签: gradle intellij-idea gradle-plugin

我正在尝试创建Gradle插件,当我定义插件的idimplementationClass时,IntelliJ说Cannot assign 'String' to 'T'

enter image description here

  • 为什么显示警告?
  • 我该如何解决?

我正在使用

IntelliJ IDEA 2020.1.1 (Ultimate Edition)
Build #IU-201.7223.91, built on April 30, 2020

1 个答案:

答案 0 :(得分:2)

IntelliJ无法推断类型,尤其是在closure内部。这对Gradle文件使用Groovy语法是不利的。您会在某些地方看到IntelliJ能够正确推断类型,而在其他地方则不能。

这是Kotlin DSL真正发光的地方。如果您切换到Kotlin DSL,则几乎可以在任何地方获得代码完成和提示。

以您的Kotlin为例,我得到以下信息:

kotlin-dsl

由于Kotlin是不同于Groovy的静态类型语言,您可以看到我完成了全部代码。

如果您真的想使用Groovy完整地完成代码和提示,那么我建议避免使用Groovy DSL,而直接使用Gradle API:

enter image description here

上述Groovy的简化版本:

project.extensions.configure(GradlePluginDevelopmentExtension, { GradlePluginDevelopmentExtension gradlePluginExtension ->
    gradlePluginExtension.plugins({ NamedDomainObjectContainer<PluginDeclaration> pluginDeclarations ->
        pluginDeclarations.create("ll.greating", { PluginDeclaration pluginDeclaration ->
            pluginDeclaration.setId("ll.greeting")
        })
    })
})