Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何轻松检查对返回通配符泛型的方法的调用?_Java_Spring_Generics_Wildcard_Easymock - Fatal编程技术网

Java 如何轻松检查对返回通配符泛型的方法的调用?

Java 如何轻松检查对返回通配符泛型的方法的调用?,java,spring,generics,wildcard,easymock,Java,Spring,Generics,Wildcard,Easymock,我们正在考虑切换到Spring3.0,并在Spring3.0、EasyMock和Java泛型的交集中遇到问题 在一个地方,我们正在模拟Spring 3.0 AbstractBeanFactory,特别是这种方法: public Class<?> getType(String name) throws NoSuchBeanDefinitionException { ... } 因为getType返回Class,andReturn需要Class作为一个参数,这根本无法正常工作 有一个已

我们正在考虑切换到Spring3.0,并在Spring3.0、EasyMock和Java泛型的交集中遇到问题

在一个地方,我们正在模拟Spring 3.0 AbstractBeanFactory,特别是这种方法:

public Class<?> getType(String name) throws NoSuchBeanDefinitionException { ... }
因为
getType
返回
Class
andReturn
需要
Class
作为一个参数,这根本无法正常工作


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

我以前在Mockito上遇到过类似的问题。我还不知道为什么会这样。您可以将expect(..)参数强制转换为非泛型类类型ala

expect((Class) mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);

然后你会得到一个警告,如果你想的话,你可以抑制它。不是一个非常优雅的解决方案;我将再花几分钟看一看。

避免任何类型转换和警告的最简单方法是使用
expectLastCall()
而不是
expect(…)
(有关详细信息,请参阅)

因此,在这种情况下:

mockBeanFactory.getType(CLASS_NAME);
expectLastCall().andReturn(SOME_CLASS);

这难道不只是一个警告吗?这就成功了。不幸的是,在处理Java泛型时,我开始期待不雅观的解决方案@阿兰克鲁格-我不能+1这个就够了。我花了20分钟试图找出如何搜索这个问题:我猜为什么会发生这种情况是因为Java不能确保从EasyMock的
expects()
返回的通配符类型与从
andReturns()
返回的通配符类型相同。在实现中,编译器只需要处理一个通配符:方法的返回类型。按照EasyMock的设置方式,需要有两个通配符:预期返回类型和实际返回类型。当每种类型中都有一个通配符时,
mockBeanFactory.getType(CLASS_NAME);
expectLastCall().andReturn(SOME_CLASS);