如何EasyMock调用返回通配符泛型的方法?

Ala*_*ger 14 java generics spring easymock wildcard

我们正在考虑切换到Spring 3.0并遇到Spring 3.0,EasyMock和Java Generics的问题.

在一个地方,我们正在嘲笑Spring 3.0 AbstractBeanFactory,特别是这个方法:

public Class<?> getType(String name) throws NoSuchBeanDefinitionException { ... }
Run Code Online (Sandbox Code Playgroud)

在早期版本的Spring中,这会返回一个非泛型的,一切都很好.但是,使用泛型,我们遇到了麻烦:

expect(mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);
Run Code Online (Sandbox Code Playgroud)

因为getType返回Class<?>,andReturn需要Class<?>作为参数,这根本不能正常工作.

这有一个已知的解决方法吗?

Lad*_*ein 21

我之前遇到过像Mockito这样的问题.我不确定它为什么会发生.您可以将expect(..)参数强制转换为非泛型类类型ala

expect((Class) mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);
Run Code Online (Sandbox Code Playgroud)

然后你就会有一个警告,你可以根据需要进行压制.不是很优雅的解决方案; 我要花几分钟时间看一下.

  • 这就是诀窍.遗憾的是,在处理Java Generics时,我开始期待不太优雅的解决方案. (5认同)
  • 给你们两个+1.@AlanKrueger - 我不能为此+1.我花了20分钟*试图弄清楚如何搜索这个问题*:P (4认同)