我们最近从Oracle JDK 8切换到了OpenJDK 11,在以下情况下,我遇到了奇怪的行为:
final List<Interface> foo = Arrays.asList(EasyMock.mock(Interface.class))
通过JUnit在单元测试中运行时,出现以下异常:
com.sun.proxy。$ Proxy225类不能转换为[Lorg.example.Interface; (com.sun.proxy。$ Proxy225和[Lorg.example.Interface;位于加载程序'app'的未命名模块中)
EasyMock版本是最新版本(4.0.1)。
确定我应该使用Collections.singletonList(...)
,这也是Java9以来编译和运行的东西! List.of(...)
,是的。
我并没有真正解决问题,但是我认为这与Java 11的EasyMock有关。
答案 0 :(得分:1)
这是类型推断问题。这是由EasyMock进行类型推断的新方法引起的。在很多情况下,它都可以提供极大的帮助,但这是一个无法转换为正确类型的示例。
解决方案是使用类型见证。这将起作用:List<Interface> foo = Arrays.asList(EasyMock.<Interface, Interface>mock(Interface.class));