切换到 Java 1.8 后。 JDK 我的一些测试类编译失败。 实现类示例:
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
public class ImplClass {
public <T> Future<T> executeTask(final Callable<T> task) {
return null;
}
}
这是 Mockito 的测试类:
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.concurrent.Callable;
import org.junit.Before;
public class TestClass {
private ImplClass implClassMock;
@Before
public void setUp() {
implClassMock = mock(ImplClass.class);
when(implClassMock.executeTask(any(Callable.class))).thenReturn(null);
}
}
我收到错误消息:The method executeTask(Callable<T>) in the type ImplClass is not applicable for the arguments (Callable)
切换回 java 编译器 1.7 一切正常。
知道如何解决这个问题吗?
最佳答案
从 Java 8 开始,compiler type inference有了很大的提高。
现在您可以在没有任何编译警告的情况下从匹配器中删除类参数:
when(implClassMock.executeTask(any())).thenReturn(null);
注意:我遇到了同样的编译器故障,但仅限于 eclipse。可能是错误?
关于带有 Mockito 1.9.5 的 Java 1.8 给出编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675745/