11

在我的 UT 代码中,提取下面的内容,我看到警告:

Unchecked generic array creation for varargs parameter of
type Matcher <? extends String> []

我已经阅读了另一个关于使用 varargs 方法的泛型参数的问题的stackoverflow 答案。

但是有没有一种巧妙的方法来稍微重组这个测试来摆脱丑陋的警告并避免@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"))));
    }


}
4

1 回答 1

18

如果这是 Java 7+,那么您正在使用的库可以用@SafeVarargs. 但是,这不在您的控制之下。

否则无法使用此方法避免未经检查的警告,因为该方法从根本上需要参数化类型的数组,并且如果在null某处没有未经检查的操作(在您的方法或您调用的其他一些方法)。

或者,查看 的文档CoreMatchers,您似乎可以考虑使用 的替代重载allOf,它需要一个Iterable匹配器。您可以在没有未经检查的操作的情况下使用。

于 2013-07-18T03:01:01.810 回答