【问题标题】:Groovy extension methods in statically compiled code静态编译代码中的 Groovy 扩展方法
【发布时间】:2019-03-30 13:46:56
【问题描述】:

有很多方法可以为 Groovy 中的现有类型定义扩展方法,例如元类、类别、扩展模块等。我想知道,它们中的哪些与通过@CompileStatic 的静态编译兼容。我知道可以将预构建的扩展模块 jar 放入类路径中,为例如提供扩展方法。字符串,然后编写一个@CompileStatic Groovy 类,该类使用扩展模块中的扩展方法。但是,我想要一个解决方案,我可以在同一个项目中定义扩展方法,这样我就不必提前构建扩展模块。这在 Groovy 中可行吗?

【问题讨论】:

  • 我假设您尝试过但没有成功?你尝试了什么?
  • 您是否暗示我列出的可能性应该有效?好吧,我尝试在我想使用它的同一个项目中定义一个扩展模块并且它可以工作,但是当我添加@CompileStatic 时却没有。老实说,我没有尝试过带有“使用”的类别,也没有尝试过元类,但我 99% 确信它们不会起作用,因为它们本质上是动态的。 Traits 不是一个选项,因为它与使用静态方法一样冗长。编辑:感谢您的链接,但答案提出了一个单独的项目,而我想知道是否有一个单一的项目解决方案。
  • 我找到了编写静态编译器的this post from Cédric。我不相信任何事情都发生了变化……但我可能错了……我将信心放在 85% 左右,所以会为此感到紧张吗????我认为问题在于 groovy 会在启动时扫描类路径以查找扩展定义。因此,它们必须在启动时存在于类路径中,这意味着它们不能作为同一步骤的一部分进行编译
  • 对我来说足够自信,我想我的问题的答案是否定的。谢谢!额外的源集可能是最好的解决方法。

标签: groovy extension-methods compile-static


【解决方案1】:

来自 cmets 的 tim_yates 的回答:很可能不可能,请参阅 here。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2011-05-12
    • 1970-01-01
    • 2015-11-11
    • 2010-10-26
    相关资源
    最近更新 更多