使用TemplateEngine将变量“URL”解释为类的令人惊讶的行为

时间:2016-12-19 15:45:08

标签: templates groovy

给出以下Groovy代码:

def engine = new SimpleTemplateEngine()
def propMap = [ URL: "http://stackoverflow.com",URL2: "http://stackoverflow.com"]
def result = engine.createTemplate('''

${URL}
${URL2}

''').make(propMap) as String
println(java.net.URL)

输出

class java.net.URL
http://stackoverflow.com

不知怎的,URL最终被解释为类java.net.URL(Groovy似乎是自动导入的),但为什么呢?并且在此上下文中可以使用名为URL的变量吗?

1 个答案:

答案 0 :(得分:2)

Groovy正在制作多个default imports,其中还包含java.net。导入java.net.URL显然会隐藏您的本地变量。

您可以使用this明确告诉Groovy使用您的变量而不是java.net.URL

${this.URL}
${URL2}

我还尝试使用别名进行导入,如下所示:

import java.net.URL as JavaURL

但它并没有真正帮助,因为使用了隐式(URL)和显式(JavaURL)导入。