【问题标题】:How imported class work in Groovy Closure when calling it?调用时导入的类在 Groovy Closure 中如何工作?
【发布时间】:2020-03-02 08:11:47
【问题描述】:

我有一个 Groovy 闭包,它使用一些导入的类,例如:

import com.XXX

Closure test = { a -> XXX(a) }

test('some str')

导入的类 XXX 如何在闭包测试中工作,因为我从未在测试中定义 XXX。 在这种情况下,delegate 和 owner 指向当前脚本,但仍然不知道 import 是如何工作的。

谢谢

【问题讨论】:

  • 你有可以执行的例子吗?
  • 这是关于“导入”如何在生成的内部类中结束的吗?

标签: groovy


【解决方案1】:

这个例子行得通,也许看看你如何指定import语句的包结构:

assert org.apache.commons.lang3.text.WordUtils.capitalizeFully('groovy closure') == 'Groovy Closure'

import org.apache.commons.lang3.text.WordUtils
Closure test = { a -> WordUtils.capitalizeFully(a) }
assert test('groovy closure') == 'Groovy Closure'

【讨论】:

    【解决方案2】:

    我终于发现这是一个与 Java 相关的问题。

    Java 中的“import”关键字是一种语法糖,它可以让你声明一个没有完整路径名的类。并且在编译类文件时,类名将被编译器替换为导入的完整路径。

    所以在我的例子中,XXX 将在 Closure 中编译为 com.XXX(不管是 Java 还是 Groovy 类),它可以在任何被调用的类中工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2013-11-15
      • 2012-06-29
      相关资源
      最近更新 更多