2013-07-16 7 views
8

kullanarak uyarı:"için İşaretlenmemiş jenerik dizi oluşturma tipi eşleştirici ait parametre varargs <? Uzanır dize> []", aşağıda ayıklamak, ben uyarı bakın benim UT kodunda CoreMatchers.allOf()

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

Başka bir stackoverflow answer numaralı belgede, bir varargs yöntemine genel bir parametre kullanan sorunlar hakkında okudum.

Ancak çirkin uyarılardan kurtulmak ve @SuppressWarnings'u önlemek için bu testi biraz yeniden yapılandırmanın iyi bir yolu var mı? Bu Java 7+ ise

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


} 

cevap

12

, ardından kullanmakta olduğunuz kütüphane @SafeVarargs ile yöntemini açıklama olabilir. Ancak, bu sizin kontrolünüz altında değildir. Aksi takdirde, bu yöntemle işaretlenmemiş bir uyarıdan kaçınmanın bir yolu yoktur, çünkü yöntem temel olarak bir parametreli türden bir dizi gerektirir ve bu tür bir denetimsiz bir işlem yapılmadan bu tür bir null değeri elde etmek imkansızdır (yönteminizde veya aradığınız başka bir yöntemde).

Veya, CoreMatchers belgelerine bakarak, allOf alternatif yükünü kullanmayı düşünebilirsiniz, bunun yerine bir Iterable eşleştirici alır. Denetlenmeyen işlemler kullanmadan kullanabilirsiniz.

+0

Derleyici, '@ SafeVarargs' öğesinin arabirimlerde bulunmasının mümkün olmadığı bir ** final ** yönteminde ayarlandığını not edecektir. – Brice

İlgili konular