Groovy中单个变量的两个类型声明?

时间:2013-08-15 21:11:35

标签: types groovy gradle

在阅读有关Gradle插件的教程时,我会看到以下代码:

apply plugin: GreetingPlugin

greeting.message = 'Hi from Gradle'

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        // Add the 'greeting' extension object
        project.extensions.create("greeting", GreetingPluginExtension)
        // Add a task that uses the configuration
        project.task('hello') << {
            println project.greeting.message
        }
    }
}

class GreetingPluginExtension {
    def String message = 'Hello from GreetingPlugin'
}

我的理解是,行def String message = 'Hello from GreetingPlugin'声明了两种类型(通用def类型和特定String类型)。删除任何一种类型似乎都允许脚本继续执行。

Groovy是否允许为单个变量进行两种类型的声明?如果是这样,这种语言功能的用例是什么?它在这种情况下是否有特定目的?

2 个答案:

答案 0 :(得分:3)

该行

def String message = 'Hello from GreetingPlugin'

错了。 def在这种情况下浪费了字符,因为它没有做任何事情

该行与

相同
String message = 'Hello from GreetingPlugin'

请参阅Def and type section in this page

答案 1 :(得分:1)

如果您不关心将变量限制为特定类型,请使用def,例如如果变量需要在运行时支持不同的类型。否则,您可以省略def并指定类型。使用两者都没有任何好处。

在这里阅读语义: http://groovy.codehaus.org/Scoping+and+the+Semantics+of+%22def%22