在我的UT代码中,在下面提取,我看到警告:
Unchecked generic array creation for varargs parameter of
type Matcher <? extends String> []
我已经在另一个stackoverflow answer中读到了使用varargs方法的泛型参数的问题。
但有没有一种巧妙的方法来稍微重组这个测试以摆脱丑陋的警告并避免@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"))));
}
}
答案 0 :(得分:16)
如果这是Java 7+,那么您使用的库可以使用@SafeVarargs
注释该方法。但是,这不在你的控制之下。
否则无法使用此方法避免未经检查的警告,因为该方法从根本上需要一个参数化类型的数组,如果没有取消选中,则无法获得此类型的非null
值在某处操作(在您的方法或您调用的其他方法中)。
或者,查看CoreMatchers
的文档,您似乎可以考虑使用allOf
的备用重载,而这需要Iterable
匹配器。没有未经检查的操作就可以使用。