gpt4 book ai didi

java - 如何让 contains(List itemMatchers) 在 Java 7 中编译?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:49 26 4
gpt4 key购买 nike

我正在学习 Hamcrest 1.3,我想为 Matchers 中的每个 Hamcrest 静态方法提供一个示例。 .有用的 Javadoc 已经有一些方法的示例。我测试了以下 contains使用 Java 8 的代码片段,它通过了:

assertThat(Arrays.asList("foo", "bar"), 
contains(Arrays.asList(equalTo("foo"), equalTo("bar"))));

但是,我的团队目前使用的是 Java 7,因此我想确保所有示例都适用于该版本。上面的代码片段在 Java 7 中产生以下错误:

no suitable method found for assertThat(java.util.List,org.hamcrest.Matcher>>>) method org.junit.Assert.assertThat(T,org.hamcrest.Matcher) is not applicable (actual argument org.hamcrest.Matcher>>> cannot be converted to org.hamcrest.Matcher> by method invocation conversion) method org.junit.Assert.assertThat(java.lang.String,T,org.hamcrest.Matcher) is not applicable (cannot instantiate from arguments because actual and formal argument lists differ in length)

我知道 Java 8 为静态方法添加了新的隐式类型化功能,我认为这可能是相关的。我试图重构参数并将它们转换为预期的参数,但这会导致相同的错误:

List<String> actual = Arrays.asList("foo", "bar");
List<Matcher<String>> expected = Arrays.asList(equalTo("foo"),
equalTo("bar"));
assertThat(actual, contains(expected));

调用static <E> Matcher<java.lang.Iterable<? extends E>> contains(java.util.List<Matcher<? super E>> itemMatchers) 的正确方法是什么?在 Java 7 中?

最佳答案

在 Hamcrest Javadoc 中,contains() 的方法签名您的目标是:

 public static <E> Matcher<Iterable<? extends E>> contains(List<Matcher<? super E>> itemMatchers);

上面签名中需要注意的重要一点是 List<Matcher<? super E>> . Java 7 无法推断 List<Matcher<? super E>>来自 List<Matcher<String>> . contains()额外重载,因此 Java 7 目标方法的签名是:

public static <E> Matcher<Iterable<? extends E>> contains(E... items);

这就是您收到神秘编译错误消息的原因!

幸运的是,修复非常简单:

List<String> actual = Arrays.asList("foo", "bar");
List<Matcher<? super String>> expected = Arrays.<Matcher<? super String>>asList(equalTo("foo"),
equalTo("bar"));
assertThat(actual, contains(expected));

关于java - 如何让 contains(List<Matcher> itemMatchers) 在 Java 7 中编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132477/

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