Groovy 是否可以使用一个类别来“引用”;“引导”;一堆相关的类别?

Groovy 是否可以使用一个类别来“引用”;“引导”;一堆相关的类别?,groovy,categories,Groovy,Categories,我有一个类别类,我想“使用”它作用于第三方服务类。服务类有一组xxxRequest和xxxResponse类,以及用于每个xxx调用的数据的附加子类 我希望在应用服务类别的同时,自动将类别应用于每个附加类,并具有相同的范围 我可以列出use块中的所有类别类,但是有很多,我不想公开这些细节。基类不受我的控制,所以我不能使用@category/@mixin 目前,我的服务类别中有一个静态初始化方法,它执行一系列mixin调用(以及添加额外的构造函数)。这工作正常,但不提供我想要的范围 有没有我错过的

我有一个类别类,我想“使用”它作用于第三方服务类。服务类有一组xxxRequest和xxxResponse类,以及用于每个xxx调用的数据的附加子类

我希望在应用服务类别的同时,自动将类别应用于每个附加类,并具有相同的范围

我可以列出use块中的所有类别类,但是有很多,我不想公开这些细节。基类不受我的控制,所以我不能使用@category/@mixin

目前,我的服务类别中有一个静态初始化方法,它执行一系列mixin调用(以及添加额外的构造函数)。这工作正常,但不提供我想要的范围


有没有我错过的更简单的方法?

我不确定我是否明白你想做什么。如果您试图在同一代码块中同时使用多个类别,但又不想在每次使用时都列出所有类别(如果不是您的意思,请纠正我),则可以将该长度
use
放在一个包含一个代码块(闭包)的方法中作为参数,然后使用该方法,而不是长的
use
。比如:

@Category(String)
class ShoutCategory {
    def shout() {
        this.toUpperCase() + '!'
    }
}

@Category(Integer)
class ToEnglishCategory {
    def toEnglish() {
        // Only works for integers in 0..5 for now...
        ['zero', 'one', 'two', 'three', 'four', 'five'][this]
    }
}

def useAwesomeExtensions(Closure cl) {
    use (ShoutCategory, ToEnglishCategory) {
        cl()
    }
}

useAwesomeExtensions {
    // Here we can do all sorts of magic things.
    println 3.toEnglish().shout() // Outputs "THREE!"
}

// "hello".shout() -> Would throw a MissingMethodException here

在这个愚蠢的示例中,String和Integer类将是您想要扩展但无法访问的类,
useAwesomeExtensions
就像一个包含一系列其他类别的大类别。希望有帮助:)

这正是我想要的,除了说使用(AwesomeExtensions)和设置AwesomeExtensions类别ShoutCategory和ToEnglishCategory,而不是使用单独的closure@MichaelRutherfurd是的,我试着使用
@Mixin
将类别混合到一个更大的类别中,但似乎不起作用。虽然用法略有不同,但此解决方案是否适合您想要实现的目标?