加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用Groovy进行Java泛型和重载

发布时间:2020-12-14 16:21:27 所属栏目:大数据 来源:网络整理
导读:我使用Groovy,JUnit和EasyMock为我的 Java应用程序编写单元测试. 在EasyMock中有几个重载方法capture()已被弃用,注意“因为更难删除强制执行,不能在Java 7中编译”.该方法将Capture T类型的对象作为参数.除其他外,存在以下方法: 静态布尔捕获(Capture Boole
我使用Groovy,JUnit和EasyMock为我的 Java应用程序编写单元测试.
在EasyMock中有几个重载方法capture()已被弃用,注意“因为更难删除强制执行,不能在Java 7中编译”.该方法将Capture< T>类型的对象作为参数.除其他外,存在以下方法:

>静态布尔捕获(Capture< Boolean>捕获)
>静态布尔捕获(捕获<整数>捕获)
> ……
>静态< T> T捕获(捕获< T>捕获)

在Java中不再允许这样做,但如果直接从Java调用该代码,则会调用正确的方法.例如.当你执行这段代码

Capture<MyClass> myClassCapture = new Capture<MyClass>();
mockObject.someMethod(capture(myClassCapture));

调用正确的方法(列表中的最后一个).

另一方面,如果从Groovy内部调用相同的代码,则会调用列表中的第一个方法,并在测试中出错.我认为这与Java和Groovy如何解决这些方法有关.我的假设是Java在编译时绑定方法,而Groovy试图在运行时找到该方法并采用它可以找到的任何方法(可能是第一个).

谁能准确解释这里发生了什么?这将更好地理解Java和Groovy之间的不同行为.

我通过将Groovy中的调用委托给Java方法来修复它,它将为我完成这项工作:

public class EasyMockUtils {

    public static <T> T captureObject(Capture<T> captureForObject) {
        return EasyMock.capture(captureForObject);
    }
}

有没有更好的方法?

解决方法

我只是使用EasyMock 3.0来解决这个问题.然而,看起来它已经通过重命名包含原始图形的所有方法并仅留下一个剩余的捕获方法而从EasyMock 3.2中解析.

有关详细信息,请查看3.2文档:http://easymock.org/api/easymock/3.2/org/easymock/EasyMock.html#capture%28org.easymock.Capture%29

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读