给出以下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
的变量吗?
答案 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
)导入。