“Création de tableau générique non contrôlée pour le paramètre varargs de type Matcher ”à l’aide de CoreMatchers.allOf ()

Dans mon code UT, extrait ci-dessous, je vois un avertissement:

Unchecked generic array creation for varargs parameter of
type Matcher []

J’ai lu une autre réponse à stackoverflow sur les problèmes d’utilisation d’un paramètre générique pour une méthode varargs.

Mais existe-t-il un moyen @SuppressWarnings restructurer légèrement ce test pour se débarrasser de l’avertissement @SuppressWarnings et éviter @SuppressWarnings ?

 package stackoverflow; import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Test; import static org.junit.matchers.JUnitMatchers.containsSsortingng; import static org.hamcrest.CoreMatchers.not; public class FooTest { @SuppressWarnings({"unchecked"}) @Test public void sampleTest() { Assert.assertThat("foo bar", CoreMatchers.allOf( containsSsortingng("foo"), containsSsortingng("bar"), not(containsSsortingng("baz")))); } } 

S’il s’agit de Java 7+, la bibliothèque que vous utilisez peut annoter la méthode avec @SafeVarargs . Cependant, ce n’est pas sous votre contrôle.

Sinon, il est impossible d’éviter un avertissement non contrôlé avec cette méthode, car celle-ci nécessite fondamentalement un tableau d’un type paramétré, et il est impossible d’obtenir une valeur non null de ce type sans une opération non contrôlée quelque part (dans votre méthode ou une autre méthode que vous appelez).

Ou, en regardant la documentation pour CoreMatchers , il semble que vous pourriez envisager d’utiliser la surcharge alternative de allOf , qui prend un Iterable de correspondants. Que vous pouvez utiliser sans opérations non contrôlées.