Java &引用;为Matcher<;类型的varargs参数创建未选中的泛型数组;?扩展字符串>;[……”是;使用CoreMatchers.allOf()发出警告
在我的UT代码中,摘录如下,我看到警告:Java &引用;为Matcher<;类型的varargs参数创建未选中的泛型数组;?扩展字符串>;[……”是;使用CoreMatchers.allOf()发出警告,java,generics,generic-collections,hamcrest,Java,Generics,Generic Collections,Hamcrest,在我的UT代码中,摘录如下,我看到警告: 为的varargs参数创建未选中的泛型数组 键入Matcher如果这是Java 7+,那么您正在使用的库可以使用@SafeVarargs注释该方法。但是,这不在您的控制之下 否则,无法使用此方法避免未经检查的警告,因为该方法基本上需要参数化类型的数组,并且如果没有未经检查的操作(在您的方法或您调用的其他方法中),则不可能获得此类型的非null值 或者,查看 CalMeMeTrace的文档,似乎可以考虑使用 AOFF/的替代重载,而不是匹配器的可迭代< /
为的varargs参数创建未选中的泛型数组
键入Matcher如果这是Java 7+,那么您正在使用的库可以使用@SafeVarargs
注释该方法。但是,这不在您的控制之下
否则,无法使用此方法避免未经检查的警告,因为该方法基本上需要参数化类型的数组,并且如果没有未经检查的操作(在您的方法或您调用的其他方法中),则不可能获得此类型的非
null值
或者,查看<代码> CalMeMeTrace的文档,似乎可以考虑使用<代码> AOFF/<代码>的替代重载,而不是匹配器的<代码>可迭代< /代码>。无需取消选中操作即可使用。
注意,编译器将强制在最终方法上设置@SafeVarargs
,这在接口上当然是不可能的。
package stackoverflow;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.matchers.JUnitMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
public class FooTest {
@SuppressWarnings({"unchecked"})
@Test
public void sampleTest() {
Assert.assertThat("foo bar",
CoreMatchers.allOf(
containsString("foo"),
containsString("bar"),
not(containsString("baz"))));
}
}