Java &引用;为Matcher<;类型的varargs参数创建未选中的泛型数组;?扩展字符串>;[……”是;使用CoreMatchers.allOf()发出警告

Java &引用;为Matcher<;类型的varargs参数创建未选中的泛型数组;?扩展字符串>;[……”是;使用CoreMatchers.allOf()发出警告,java,generics,generic-collections,hamcrest,Java,Generics,Generic Collections,Hamcrest,在我的UT代码中,摘录如下,我看到警告: 为的varargs参数创建未选中的泛型数组 键入Matcher如果这是Java 7+,那么您正在使用的库可以使用@SafeVarargs注释该方法。但是,这不在您的控制之下 否则,无法使用此方法避免未经检查的警告,因为该方法基本上需要参数化类型的数组,并且如果没有未经检查的操作(在您的方法或您调用的其他方法中),则不可能获得此类型的非null值 或者,查看 CalMeMeTrace的文档,似乎可以考虑使用 AOFF/的替代重载,而不是匹配器的可迭代< /

在我的UT代码中,摘录如下,我看到警告:

为的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"))));
    }


}