gpt4 book ai didi

java - 有没有办法创建一个静态方法,该方法将返回与集合匹配或匹配 null 的 Hamcrest 匹配器?

转载 作者:行者123 更新时间:2023-11-30 04:04:22 25 4
gpt4 key购买 nike

我正在尝试将 Hamcrest 匹配器引入到我团队的一些代码中。为了消除匹配实例集合的复杂性,我想为每个匹配器编写一个辅助方法,我希望匹配其集合。所以本质上我正在包装 containsInAnyOrder。话虽如此,如果有人传入 null 作为预期值和实际值,我希望它能够匹配。但按照我编写代码的方式,如果传入预期的 null ,它将抛出 NullPointerException 。因此,如果按预期传入 null,我想返回 IsNull 匹配器。这是我的示例代码:

/**
* Matches all Foo objects in an order agnostic manner.
* @param expected The collection of Foo objects to be matched.
* @return A matcher that will match a collection of Foos
*/
@SuppressWarnings("unchecked")
public static Matcher<Iterable<? extends Foo>> matchesAllfoos(Collection<Foo> expected)
{
if (expected == null)
{
// Doesn't work because Matcher<Iterable> is not a Matcher<Iterable<? extends Foo>>
return nullValue(Iterable.class);
}

// The cast is here to provide a hint to Java as to which overloaded method to choose.
// See http://stackoverflow.com/questions/18614621/conflicting-overloads-for-hamcrest-matcher
return containsInAnyOrder((Collection)Collections2.transform(expected, FOO_TO_MATCHER));
}

那么我该如何完成我想做的事情呢?使用 nullValue() 不起作用,因为它希望我返回 Matcher。强制转换 nullValue(Iterable.class) 不起作用。有什么想法吗?

最佳答案

如果你仔细观察,nullValue(Class<T>)只需创建一个 IsNull<T>匹配器。

所以,if you are calling :

public static <T> Matcher<T> nullValue(Class<T> type) {
return new IsNull<T>();
}

最后(因为泛型给你带来了困难,因为你无法找出潜在的 null 对象的运行时类),你可以直接调用构造函数:

new IsNull<Iterable<? extends Foo>>();

所以解决方案就是直接使用它,而不使用 nullValue()使用方法:

/**
* Matches all Foo objects in an order agnostic manner.
* @param expected The collection of Foo objects to be matched.
* @return A matcher that will match a collection of Foos
*/
@SuppressWarnings("unchecked")
public static Matcher<Iterable<? extends Foo>> matchesAllfoos(Collection<Foo> expected)
{
if (expected == null)
{
return new IsNull<Iterable<? extends Foo>>();
}

// The cast is here to provide a hint to Java as to which overloaded method to choose.
// See http://stackoverflow.com/questions/18614621/conflicting-overloads-for-hamcrest-matcher
return containsInAnyOrder((Collection)Collections2.transform(expected, FOO_TO_MATCHER));
}

关于java - 有没有办法创建一个静态方法,该方法将返回与集合匹配或匹配 null 的 Hamcrest 匹配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21117868/

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