Java 泛型和 Groovy 重载

2023-12-06

我使用 Groovy、JUnit 和 EasyMock 为 Java 应用程序编写单元测试。 EasyMock中有几个重载方法capture()已弃用,并附有注释“由于强制擦除更困难,无法在 Java 7 中编译”。这些方法将类型的对象作为参数Capture<T>。除其他外,存在以下方法:

  • static boolean capture(Capture<Boolean> captured)
  • static boolean capture(Capture<Integer> captured)
  • ...
  • static <T> T capture(Capture<T> captured)

这在 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 泛型和 Groovy 重载 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • Android 中的列表(特别是 RecyclerView 和 CardView)如何工作

    请原谅我问这个问题 但我是 Android 开发新手 尽管我正在尝试了解developer android com 网站上的基础知识 但大多数示例 即使他们说它们是为 Android Studio 构建的 尚未设置为使用 Gradle 因此
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • Rust 中的表达式模板实现类似于 boost::yap

    我正在尝试自学 Rust 作为一个具有挑战性的学习项目 我想复制 C 表达式模板库的设计模式提升 雅普 https www boost org doc libs 1 74 0 doc html yap html 我不需要一个完整的实现 我只
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • Scala UpperBound 和 LowerBound 概念

    下面是我尝试运行的代码 class Student def printDetails println I am a student def printSomeOtherDetails println I love Studying clas
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • 如何递归计算列表中的项目数

    我希望递归地计算列表中的项目 例如 我列出了几个列表 a b c h b d c e f h 我试图找到一种方法来找出列表 a 的长度 但是在列表 a 中 我有 b c 和 h 因此我的函数然后进入列表 b 并计算那里的元素数量 然后列表
  • 在 Windows 10 上为 PyPy3 安装 numpy 时出现问题

    我在尝试在 Windows 10 计算机上安装 pypy3 的 numpy 时遇到问题 由于我无法判断这个问题是源于我的 pypy3 安装还是其他原因 所以我在这里描述了迄今为止我所遵循的所有步骤 正如官方所示下载页面 I have 下载并
  • git pull 是否总是创建合并提交?

    Does git pull总是创建合并提交 如果我有一个我更新的功能分支git pull r master 然后我切换到 master 并执行git pull feature branch我不think我得到一个合并提交 你有一个关于 gi
  • 如何像模拟橡皮擦效果一样用线条路径绘制CALayer?

    我想用触摸事件模拟橡皮擦效果 以显示顶部某块后面的图像 例如灰色 像这样的东西 我已经找到解决方案很长时间了 但我不能做得很好 以下是我的自定义视图代码 自定义视图 m id initWithCoder NSCoder aDecoder i
  • Val 在 Scala 中的行为

    我在尝试从 Eclipse 执行以下代码时收到错误 因为我无法重新分配 Val 对吧 object Test def main args Array String val tempVal 100 val checkval if tempVa
  • 在 javafx 中创建图像覆盖蒙版

    我正在尝试做一件简单的事情 我有一个二值图像 我想要的只是将二值图像叠加在彩色图像上 但是二值图像中的白色像素应该是红色的 黑色像素应该是透明的 我已经习惯了 JavaFx 但我还是坚持使用这个 我知道我可以通过使用 PixelReader
  • Raspberry ALSA 声音输出/输入从机

    我正在尝试设置一台设备用于播放 另一台设备用于捕获 我的nano etc asound conf有这个 pcm default type asym playback pcm plughw 1 1 capture pcm plughw 1 0
  • Celery / Django 单个任务运行多次

    我面临一个问题 我将任务放入队列中并且它正在运行多次 从 celery 日志中我可以看到同一个工作人员正在运行该任务 2014 06 06 15 12 20 731 INFO MainProcess Received task input
  • 使用spring进行Java注解扫描

    我有几个类需要用名称进行注释 因此我将注释定义为 Retention RetentionPolicy RUNTIME Target ElementType TYPE public interface JsonUnmarshallable p
  • Ruby ** 双星运算符

    Ruby 中的 运算符是什么 代码片段 1 5 gt 1 43 67 gt 2769405330765659902380925787724104201956901039505346829415349981622358603023818638
  • IE 对 HTML5 文档类型属性选择器的支持

    w3school 关于属性选择器的章节指出 仅当指定 DOCTYPE 时 IE7 和 IE8 才支持属性选择器 IE7 和 IE8 无法识别 HTML5 文档类型 对吗 那么 这是否意味着如果我使用 HTML5 文档类型 IE7 和 IE8
  • Selenium 与 Python-unittest - 测试返回进程已完成,退出代码为 0,并且不执行任何操作

    有人可以帮助我理解为什么执行以下代码 但没有执行任何操作吗 返回代码为 0 但浏览器未打开或未执行任何操作 值得一提的是 setUp 方法已在其他模块中以相同的方式配置 并且工作正常 请查看最后的回复 import unittest fro
  • 如何翻译 Blazor 组件和 App.razor 中的字符串?

    我想本地化共享组件的字符串 例如 NavMenu razor 或 App razor 页面 我成功地按照中所述翻译了我的页面中的内容 NET Core 通用指令还有更多特定 Blazor 文档 创建具有正确名称的资源文件 例如 PageNa
  • 如何在 thymeleaf 中包含 message.properties

    I am using spring boot with thymeleaf This is my project structure 这是我的应用程序开始课程 EnableAutoConfiguration Configuration Co
  • 查询 documentdb 中的子字段

    例如 我有以下用于收集 交付的文档 doc docid 15 deliverynum 123 text txxxxxx date 2019 07 18T12 37 58Z docid 16 deliverynum 456 text txxx
  • 如何在sqlite中使用填充连接字符串

    我的 sqlite 表中有三列 Column1 Column2 Column3 A 1 1 A 1 2 A 12 2 C 13 2 B 11 2 我需要选择Column1 Column2 Column3 e g A 01 0001 我想用一
  • 在 C 中按值传递结构而不是传递指针有什么缺点吗?

    在 C 中按值传递结构而不是传递指针有什么缺点吗 如果结构体很大 显然会存在复制大量数据的性能问题 但对于较小的结构体 它基本上应该与将多个值传递给函数相同 当用作返回值时 它可能会更有趣 C 函数只有单个返回值 但您通常需要多个返回值 因
  • 如何在不重新加载页面的情况下从数据库获取数据?

    当用户提出任何显示在分区顶部的问题时 我想制作一个常见问题解答面板 而无需重新加载页面 因为我认为我必须每隔几秒就与数据库建立连接 现在的问题是如何在不重新加载页面的情况下建立连接以及如何显示新问题 您有两个选择 Ajax 它允许您使用 J
  • 如何应用 CSS 进行打印?

    我正在尝试在我的页面之一中打印 div 但打印时无法应用 css 在样式标签内写入 media print 不起作用 我应该怎么办 使用以下
  • Java 泛型和 Groovy 重载

    我使用 Groovy JUnit 和 EasyMock 为 Java 应用程序编写单元测试 EasyMock中有几个重载方法capture 已弃用 并附有注释 由于强制擦除更困难 无法在 Java 7 中编译 这些方法将类型的对象作为参数C