EasyMock / Arrays.asList(...) 只有一个可变参数

EasyMock / Arrays.asList(...) with only one varagrs parameter

我们最近从 Oracle JDK 8 切换到 OpenJDK 11,在以下情况下我遇到了一个奇怪的行为:

final List<Interface> foo = Arrays.asList(EasyMock.mock(Interface.class))

在通过 JUnit 进行单元测试时 运行 出现以下异常:

class com.sun.proxy.$Proxy225 无法转换为 class [Lorg.example.Interface; (com.sun.proxy.$Proxy225 和 [Lorg.example.Interface; 在加载程序 'app' 的未命名模块中)

EasyMock 版本是最新的(4.0.1)。

我当然应该使用 Collections.singletonList(...),这也是编译和 运行 的内容,或者自 Java9 以来的现在!? List.of(...),但是是的。

我不太明白这个问题,但我认为它与 Java 11 的 EasyMock 有关。

这是一个类型推断问题。这是由 EasyMock 进行类型推断的新方式引起的。它在很多情况下都有很大帮助,但这是一个无法转换为正确类型的示例。

解决方案是使用类型见证。这将起作用:List<Interface> foo = Arrays.asList(EasyMock.<Interface, Interface>mock(Interface.class));