在我的 UT 代码中,摘录如下,我看到警告:
Unchecked generic array creation for varargs parameter of<br/> type Matcher <? extends String> []
我读过另一个stackoverflow answer关于将通用参数用于可变参数方法的问题。
但是有没有一种巧妙的方法来稍微重组这个测试以摆脱丑陋的警告并避免 @SuppressWarnings ?
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"))));
}
}
最佳答案
如果这是 Java 7+,那么您使用的库可以使用 @SafeVarargs 注释该方法。但是,这不在您的控制之下。
否则无法使用此方法避免未经检查的警告,因为该方法从根本上需要参数化类型的数组,并且不可能获得此类型的非null 值在某处没有未经检查的操作(在您的方法或您调用的其他方法中)。
或者,查看 CoreMatchers 的文档,您似乎可以考虑使用 allOf 的替代重载,它采用 Iterable 而不是匹配器。您可以在没有未经检查的操作的情况下使用。
关于java - "Unchecked generic array creation for varargs parameter of type Matcher <? extends String> []"警告使用 CoreMatchers.allOf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679405/