gpt4 book ai didi

java - Hamcrest assertThat - 类型推断

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:39 24 4
gpt4 key购买 nike

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

List<String> names = ...
assertThat(names, is(empty()));

这在我运行在 Java 上的 Eclipse 上工作得很好 1.7.0.79 (以及 1.6.0.31 )。

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

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>>知道 signaturesisempty方法。

问题是我对我可以在远程系统上切换到哪个 JDK 的控制有限,这是一个产品。测试代码,我也不允许解决这个问题。 所以,目前我想做的只是了解问题是否是由于上述 JDK 上的错误类型推断引起的。诚然,我还没有在上述 JDK 上尝试过相同的方法还在我的个人电脑上。

我使用 hamcrest 1.3 BTW。

最佳答案

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

public static <E> org.hamcrest.Matcher<java.util.Collection<E>> empty() // 1.2

public static <E> org.hamcrest.Matcher<java.util.Collection<? extends E>> empty() // 1.3

这可以解释为什么它在 1.2 上失败但在 1.3 上有效。

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

关于java - Hamcrest assertThat - 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34664647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com