import java.util.List; @SafeVarargs public class SafeVarargsTests { //fixed arity @SafeVarargs public void testNonVarargs1(){} @SafeVarargs public void testNonVarargs2(int i){} @SafeVarargs public void testNonVarargs3(T t){} //non static/non final @SafeVarargs public void testNonVarargs4(int... i){} //reassigned @SafeVarargs public final void testT(T[] tt, T... t) { t = tt; System.out.println(t[0]); } //incorrect types @SafeVarargs public final void testString(String... str){ } @SafeVarargs public final void testStringArray(String[]... str){ } @SafeVarargs public static void testUnbound(List... t){} //correct usages @SafeVarargs public static void foo(T... t){} @SafeVarargs public static void foo1(List... t){} @SafeVarargs public static void foo2(List... t){} } abstract class AClass { @SafeVarargs AClass(T... d){ System.out.println(d); } } class ABClass extends AClass { @SafeVarargs ABClass(T... d){ super(d); } }