【问题标题】:Cannot assign 'String' to 'T'无法将“字符串”分配给“T”
【发布时间】:2020-05-24 08:59:54
【问题描述】:

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

  • 为什么会显示警告?
  • 我该如何解决这个问题?

我正在使用

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

【问题讨论】:

    标签: gradle intellij-idea gradle-plugin


    【解决方案1】:

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

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

    将您的示例与 Kotlin 一起使用,我得到以下信息:

    您可以看到,由于 Kotlin 是一种不同于 Groovy 的静态类型语言,因此我可以完成完整的代码。

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

    上述 Groovy 的简化版:

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

    【讨论】:

    • 我已经更新了我的答案以包含一个带有类型的 Groovy sn-p
    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多