在阅读有关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是否允许为单个变量进行两种类型的声明?如果是这样,这种语言功能的用例是什么?它在这种情况下是否有特定目的?
答案 0 :(得分:3)
该行
def String message = 'Hello from GreetingPlugin'
错了。 def
在这种情况下浪费了字符,因为它没有做任何事情
该行与
相同String message = 'Hello from GreetingPlugin'
答案 1 :(得分:1)
如果您不关心将变量限制为特定类型,请使用def
,例如如果变量需要在运行时支持不同的类型。否则,您可以省略def
并指定类型。使用两者都没有任何好处。
在这里阅读语义: http://groovy.codehaus.org/Scoping+and+the+Semantics+of+%22def%22