首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hamcrest assertThat型推理

Hamcrest assertThat型推理
EN

Stack Overflow用户
提问于 2016-01-07 20:35:13
回答 1查看 1.6K关注 0票数 4

以下是我的一个项目所做工作的简化版本:

代码语言:javascript
复制
List<String> names = ...
assertThat(names, is(empty()));

这在运行在Java1.7.0.79(和1.6.0.31)上的Eclipse上很好。

但是,在使用Java 1.7.0.55 (和1.6.0.29)的远程系统上编译失败,下面是错误消息:

代码语言:javascript
复制
no suitable method found for assertThat(java.util.List<String>,org.hamcrest.Matcher<java.util.Collection<java.lang.Object>>)
    method org.hamcrest.MatcherAssert.<T>assertThat(T,org.hamcrest.Matcher<? super T>) is not applicable
      (actual argument org.hamcrest.Matcher<java.util.Collection<java.lang.Object>> cannot be converted to org.hamcrest.Matcher<? super java.util.List<String>> by method invocation conversion)
    method org.hamcrest.MatcherAssert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<? super T>) is not applicable
      (cannot instantiate from arguments because actual and formal argument lists differ in length)
    method org.hamcrest.MatcherAssert.assertThat(java.lang.String,boolean) is not applicable
      (actual argument java.util.List<String> cannot be converted to java.lang.String by method invocation conversion)

我希望第一个重载的变体与我的情况相匹配,但这并不是因为一个看似不确定的类型推断。为什么编译器似乎认为实际的参数是org.hamcrest.Matcher<java.util.Collection<java.lang.Object>>类型,而显然应该是org.hamcrest.Matcher<java.util.Collection<? extends java.lang.Object>>,知道签名 of isempty方法。

问题是,我对JDK在远程系统上可以切换到什么方面的控制有限,这是一个刺激。测试代码,我也不允许解决这个问题。因此,现在我要做的就是理解这个问题是否是由于对上述JDK的错误类型推断造成的。诚然,我还没有在我的个人计算机上尝试过相同的JDK。

我用的是hamcrest 1.3 BTW。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 21:08:57

在构建失败系统时,似乎使用了Hamcrest 1.2。当我用Hamcrest 1.2构建您的代码时,它会在使用1.3时使用相同的错误消息而失败。在检查Hamcrest代码时,Matchers.empty()签名在1.3中更改如下:

代码语言:javascript
复制
public static <E> org.hamcrest.Matcher<java.util.Collection<E>> empty() // 1.2

代码语言:javascript
复制
public static <E> org.hamcrest.Matcher<java.util.Collection<? extends E>> empty() // 1.3

这就解释了为什么它在1.2上失败而在1.3上工作。

您应该检查您的项目设置和系统的设置,以确保在构建时只有hamcrest 1.3在类路径上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34664647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档