扫码阅读
手机扫码阅读

Groovy closure 与Java function转换

243 2024-04-13
Article Summary

项目中Java与Groovy的混合编程及兼容性问题解决

在项目开发过程中,原本的逻辑是使用Java编写框架和工具类,而Groovy则用于编写脚本。然而,随着时间的推移,Groovy相对Java的优势逐渐凸显,导致开发者在使用上产生了混淆。特别是在Java的function和Groovy的closure之间存在兼容性问题。

Java function具有许多不同的实现类,根据返回值和参数个数进行区分,并且有许多具体的返回和参数类型的实现类。虽然实现逻辑并不复杂,但实现类众多。相反,Groovy的closure则简洁得多,一个实现即可满足所有需求,并且比Java有更广泛的使用场景。

由于Java function和Groovy closure并不完全兼容,混合编程时常遇到两者转换的问题。为了解决这一问题,开发了一个转换类,将Java的function转换为Groovy的closure。

        
package com.funtester.utils
import java.util.function.Consumer
import java.util.function.Function
import java.util.function.Predicate
import java.util.function.Supplier
/** * 处理Java与Groovy不兼容的问题 **/
class JToG {
    static Closure toClosure(Supplier supplier) {
        return {
            supplier.get()
        }
    }
    static Closure toClosure(Function function) {
        return {
            def t -> function.apply(t)
        }
    }
    static Closure toClosure(Predicate predicate) {
        return {
            def t -> predicate.test(t)
        }
    }
    static Closure toClusure(Consumer consumer) {
        return {
            def t -> consumer.accept(t)
        }
    }
}
        
    

在演示中,使用了一个Java function,并通过日志记录了其运行结果。随后,使用JToG类的toClosure方法将该function转换为closure,并记录了转换后的结果。演示也包括了Groovy本身实现的功能,最终通过控制台输出证实了转换和功能的成功。

FuntTester原创专题推荐

  • 接口功能测试专题
  • 性能测试专题
  • Groovy专题
  • Java、Groovy、Go、Python
  • 单测&白盒
  • FunTester社群风采
  • 测试理论鸡汤
  • FunTester视频专题
  • 案例分享:方案、BUG、爬虫
  • UI自动化专题
  • 测试工具专题
想要了解更多,点击 查看原文