传递方法作为参数Groovy

时间:2017-05-03 12:58:24

标签: groovy functional-programming

我正在创建一个Groovy项目,我想传递一个方法作为参数,这可能吗?

我有两种方法,基本上做同样的事情,但有一些小差异,每种方法都有不同的属性。

我想通过是否使用' buildPayLoad'功能还是 ' buildSecondPayLoad'进入我的sendEmail函数。

    private Operation sendEmail(Order order) {
                  def payload = buildPayload(order, templateId)
    }


    private firstEmailPayLoad buildPayload(Order order, String templateId) {
            new firstEmailPayLoad(
                templateId,
                config.fromAddress,
                order.firstPayLoadProperty,
                buildEmailDataFirstPayLoad(order)
            ).validate()
   }

   private secondEmailPayLoad buildSecondPayLoad(Order order, String templateId) {
            new secondEmailPayLoad(
                templateId,
                config.fromAddress,
                config.bccAddress,
                config.otherProperty,
                order.secondPayLoadProperty
                buildEmailData(order)
            ).validate()
 }

1 个答案:

答案 0 :(得分:2)

你可以这样做:

private Operation sendEmail(Order order, Closure builder) {
    def payload = builder(order, templateId)
}

然后用:

调用它
sendEmail(order, this.&buildPayload)

或者

sendEmail(order, this.&buildSecondPayLoad)

顺便说一句:你真的应该用大写字母开始上课,所以你应该把它叫secondEmailPayLoad而不是SecondEmailPayLoad,而不是firstEmailPayLoad